考虑以下代码:
#include <stdio.h>
#include <malloc.h>
void allocateMatrix(int **m, int l, int c)
{
int i;
m = (int**) malloc( sizeof(int*) * l );
for(i = 0; i < l; i++)
m[i] = (int*) malloc( sizeof(int) * c );
}
int main()
{
int **m;
int l = 10, c = 10;
allocateMatrix(m, l, c);
m[0][0] = 9;
printf("%d", m[0][0]);
return 0;
}
上面的代码会生成内存分配错误并崩溃。
但下面的代码将正确地工作,问题是:为什么?
#include <stdio.h>
#include <malloc.h>
int** allocateMatrix(int l, int c)
{
int i;
int **m = (int**) malloc( sizeof(int*) * l );
for(i = 0; i < l; i++)
m[i] = (int*) malloc( sizeof(int) * c );
return m;
}
int main()
{
int **m;
int l = 10, c = 10;
m = allocateMatrix(l, c);
m[0][0] = 9;
printf("%d", m[0][0]);
return 0;
}
我无法理解为什么第一段代码会崩溃,因为我只是将指向指针m(保存矩阵第一个内存地址的变量)作为参数传递。实际上,我没有看到这两段代码有任何不同之处。希望能得到任何清晰的解释。
谢谢, Rafael Andreatta
malloc.h
是错误的。malloc
在stdlib.h
中定义。 - R.. GitHub STOP HELPING ICE