我正在尝试释放使用以下代码分配的第二个数组:
int** createMatrix(int k)
{
int i;
int **res;
res = (int**)malloc(sizeof(int*)*k);
checkalloc(res);
for (i = 0; i < k; i++)
{
res[i] = (int*)malloc(sizeof(int)*k);
checkalloc(res[i]);
}
return res;
}
具有以下功能
void freeMatrix(int ***matrix, int k)
{
int i;
for (i = 0; i < k; i++)
free(matrix[i]);
free(matrix);
}
第一个元素被很好地释放,但是当
i=1
函数崩溃时出现错误:First-chance exception at 0x0f7e7e2c (msvcr100d.dll) in Q2.exe: 0xC0000005: Access violation reading location 0xccccccc8.
Unhandled exception at 0x0f7e7e2c (msvcr100d.dll) in Q2.exe: 0xC0000005: Access violation reading location 0xccccccc8.
我做错什么了?
编辑:
当尝试解除分配由以下人员分配的类似数组时,我也会遇到同样的情况:
CHARS** createImageMatrix(FILE *fp, int rows, int cols, int format)
{
CHARS**res;
int i;
res = (CHARS**)malloc(sizeof(CHARS*)*rows);
checkalloc(res);
for (i = 0; i < height; i++)
{
res[i] = (CHARS*)malloc(sizeof(CHARS)*cols);
checkalloc(res[i]);
}
return res;
}
以及处理:
void freeCharsMatrix(CHARS **matrix, int rows)
{
int i;
for (i = 0; i < rows; i++)
free(matrix[i]);
free(matrix);
}
当CHARS是:
typedef struct Chars {
char A;
char B;
char C;
char D;
}字符;
但这次我得到:
我怎么了?
最佳答案
void freeMatrix(int ***matrix, int k)
==>
void freeMatrix(int **matrix, int k)
编辑:
free(matrix+i) // when you do this the pointer across the whole array .
==>
free(matrix[i])
关于c - 尝试取消分配2D数组时的访问冲突读取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18367822/