释放2-d char数组

Use*_*ied -1 c malloc

使用此函数分配二维数组后:

char** make_matrix(int M, int N)
{
    char** MAT = (char**)malloc(M * sizeof(char));
    for (int i = 0; i < M; i++)
    {
        MAT[i] = (char*)malloc(N * sizeof(char));
    }
    return MAT;
}
Run Code Online (Sandbox Code Playgroud)

我发现试图free(M[0])导致断言失败.我能找到的关于释放2-d数组的所有内容都使用int而不是char.然而,charint以上代替每一个,断言失败消失.为什么这样,我怎么能释放整个二维阵列?

rbu*_*rny 8

你分配的内存太少了MAT.将相关行更改为:

char** MAT = (char**)malloc(M * sizeof(char*));
Run Code Online (Sandbox Code Playgroud)

这是因为MAT是指针数组,而不是字符.由于您的代码没有分配足够的内存,因此很可能在数组边界之外写入并破坏内存.

它可以与整数一起使用,因为它们更大,所以运气好的话你可以分配足够的内存(至少在32位机器上).