问题:
当你想把指针作为参数传给一个函数的形参,并通过在函数内给形参分配内存空间来为指针分配内存空间时,实际的指针并没有被分配内存.
例:
int Mat_Alloc_and_Init(int** mat, int mat_size)
{
int i;
if(NULL == (mat = (int**)malloc(mat_size * sizeof(int*))) )
return -1;
for(i=0; i<mat_size; i++)
{
if(NULL == (mat[i] = (int*)malloc(mat_size * sizeof(int))) )
return -1;
}
return 0;
}
我的理解是:当指针作为参数输入函数时,改变形参并不能改变实参指针的值;但改变形参指向的那个值时,实参指针指向的值可以被改变.(对形参直接做的变动并不会保留,但对形参指向的东西做的变动会被保留)
解决方法:
在函数内为形参分配内存,然后返回这个分配好内存的形参,用实参指针接收这个返回值
改动后代码
int** Mat_Alloc_and_Init(int mat_size)
{
int** mat;
int i;
if(NULL == (mat = (int**)malloc(mat_size * sizeof(int*))) )
exit(-1);
for(i=0; i<mat_size; i++)
{
if(NULL == (mat[i] = (int*)malloc(mat_size * sizeof(int))) )
exit(-1);
}
return mat;
}
|