在循环中使用calloc和free时,校验和不正确

-1 c c++ malloc

我在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.

Dav*_*rtz 5

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.