直接上代码吧
我自己写的时候,总是报错,但是看别人写的就能通过。
这个问题一直困扰着我,实在不明白,望大家指教。
typedef struct {
int** mat;
int matSize;
int matColSize;
} NumMatrix;
NumMatrix* numMatrixCreate(int** matrix, int matrixSize, int* matrixColSize) {
int i,j;
NumMatrix* obj;
if((NULL == matrix) || (NULL == matrix[0]) || (NULL == matrixColSize))
{
return NULL;
}
printf("%p\n", matrix);
obj = (NumMatrix*)malloc(sizeof(NumMatrix));
obj->matSize = matrixSize;
obj->matColSize = matrixColSize[0];
obj->mat = (int**)malloc(sizeof(int*) * (matrixSize+1));
for(i=0; i<matrixSize; i++)
{
obj->mat[i] = (int*)malloc(sizeof(int) * (matrixColSize[0]+1));
memcpy(obj->mat[i], matrix[i], matrixColSize[0]);// <<< 出错行
}
return obj;
}也就是说使用 matrix[i] 去访问二维指针,会报错。
还有,我访问 matrix[i][j] 的时候,也会报错。如下:
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
int i,j;
if (matrix == NULL || matrixSize == 0 || matrixColSize[0] == 0) {
return false;
}
for(i=1; i<=matrixColSize[0]; i++)
{
if( matrix[0][matrixColSize[0]-i] < target) //<<<这行matrix[i][j]出错
{
//得到目标列
break;
}
if( matrix[0][matrixColSize[0]-i] == target)
{
return true;
}
}
if(matrixColSize[0] == i)
{
return false;
}
for(j=1; j<=matrixSize-1; j++)
{
if(matrix[j][matrixColSize[0]-i] == target)
{
return true;
}
}
return false;
}但是我看别人,包括官方的回答,都是直接 matrix[i][j] 访问的呀,他们不报错,合着就我自己报错啊。。。。
下边是官方写的代码:
NumMatrix* numMatrixCreate(int** matrix, int matrixSize, int* matrixColSize) {
NumMatrix* ret = malloc(sizeof(NumMatrix));
ret->sums = malloc(sizeof(int*) * matrixSize);
ret->sumsSize = matrixSize;
for (int i = 0; i < matrixSize; i++) {
ret->sums[i] = malloc(sizeof(int) * (matrixColSize[i] + 1));
ret->sums[i][0] = 0;
for (int j = 0; j < matrixColSize[i]; j++) {
ret->sums[i][j + 1] = ret->sums[i][j] + matrix[i][j];//<<<这行matrix[i][j]不出错!??
}
}
return ret;
}
/*
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solution/er-wei-qu-yu-he-jian-suo-ju-zhen-bu-ke-b-2z5n/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
*/希望大家帮我解答一下,,谢谢。