使用此函数分配二维数组后:
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.然而,char用int以上代替每一个,断言失败消失.为什么这样,我怎么能释放整个二维阵列?
你分配的内存太少了MAT.将相关行更改为:
char** MAT = (char**)malloc(M * sizeof(char*));
Run Code Online (Sandbox Code Playgroud)
这是因为MAT是指针数组,而不是字符.由于您的代码没有分配足够的内存,因此很可能在数组边界之外写入并破坏内存.
它可以与整数一起使用,因为它们更大,所以运气好的话你可以分配足够的内存(至少在32位机器上).