我在for循环中声明了一个二维数组a(m*n).当for循环第一次运行时没有问题,但第二次它会产生错误.该计划是:
for (int j=0; j<2; j++) {
int **a = (int**)calloc(n,sizeof(int*));
for (int i=0; i<n; i++) {
a[i] = (int*)calloc(m,sizeof(int));
}
//...some operation to a[m,n] array
for (int i=0; i<n; i++)
free(a[i]);
free(a);
}
Run Code Online (Sandbox Code Playgroud)
当for循环第二次运行时,它将运行到包含的行calloc并在控制台上生成以下错误:
malloc:***对象0x94a8b14的错误:释放对象的校验和不正确 - 对象可能在被释放后被修改
如果删除包含的行,则没有区别free.
int **a=(int**)calloc(n,sizeof(int*));
^
for(int i=0;i<m;i++){
^
a[i]=(int*)calloc(m,sizeof(int));
^
Run Code Online (Sandbox Code Playgroud)
如果发生这种灾难,就会失败n < m.