int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){ int c=intervalsColSize; for(int i=0;i<intervalsSize;i++) { for(int j=i+1;j<intervalsSize;j++) { if(intervals[i][c]>=intervals[j][0]) { if(intervals[i][c]<intervals[j][c]) { intervals[i][c]=intervals[j][c]; } for(int k=j+1;k<intervalsSize;k++) { intervals[k-1][0]=intervals[k][0]; intervals[k-1][c]=intervals[k][c]; intervalsSize--; } } returnColumnSizes[i]=intervalsColSize; } returnSize=&intervalsSize; return intervals; }检错
时间: 2024-02-14 19:17:42 浏览: 34
这段代码存在以下问题:
1. 在函数开头定义了一个变量 `c`,但是没有给它赋初值,应该改为 `int c = *intervalsColSize`,以获取列数。
2. 第二个 `for` 循环中的循环条件应该改为 `j < intervalsSize - 1`,以防止数组越界。
3. 第三个 `for` 循环中应该先判断 `k < intervalsSize` 再进行数组操作,以防止数组越界。
4. `returnColumnSizes` 数组应该在函数开头先进行动态内存分配,以确保其有足够的空间存储每个子数组的列数。
5. 在最后返回结果时,应该返回一个新的二维数组,而不是原来的 `intervals` 数组,因为原来的数组已经被修改了。
6. 在返回结果时,应该将 `returnSize` 指向的地址赋值为 `intervalsSize`,而不是赋值为 `&intervalsSize`。
综上所述,修改后的代码如下所示:
```
int** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes) {
int c = *intervalsColSize;
int** res = (int**)malloc(intervalsSize * sizeof(int*));
*returnColumnSizes = (int*)malloc(intervalsSize * sizeof(int));
int idx = 0;
for (int i = 0; i < intervalsSize; i++) {
int start = intervals[i][0], end = intervals[i][c - 1];
for (int j = i + 1; j < intervalsSize; j++) {
if (intervals[j][0] <= end) {
end = fmax(end, intervals[j][c - 1]);
i++;
} else {
break;
}
}
int* interval = (int*)malloc(c * sizeof(int));
interval[0] = start;
interval[c - 1] = end;
res[idx] = interval;
(*returnColumnSizes)[idx] = c;
idx++;
}
*returnSize = idx;
return res;
}
```