我在main中创建了一个双重int指针,并调用了一个函数,我为此指针分配了位置。
void foo(int **array)
{
int i, j;
array = (int **)malloc(sizeof(int *)*(100)); //rows
for(i=0; i<100; i++)
array[i] = (int *)malloc(sizeof(int)*(50)); //cols
array[0][0] = 10;
}
在主要内容中我只有这些行;
int** array;
foo(array);
printf("%d \n", array[0][0]);
结果我得到了分段错误。由于我传递一个指针并且它是在foo
方法中分配的,这是否意味着在main
方法中它没有被分配?如何在不使foo
函数返回双指针的情况下解决它?
答案 0 :(得分:2)
定义函数的方式:
void foo(int **array);
二维数组是一个局部变量,在函数末尾超出范围。您将丢失已分配的内存,而main
函数将无法了解已分配的内存,因为array
和foo
中的main
不同。
一种解决方案是在int **
中创建main
,然后将指针传递给foo
中的指针:
void foo(int ***array);
然后,您可以通过传递给main
,foo
的指针更新*array
中的本地变量;
另一种解决方案是从函数中返回新分配的内存:
int **foo(void);
这是一个经常出现的问题,应该有大量的数据分配代码示例。
答案 1 :(得分:0)
最后,检查一下。更新你的foo功能如下,它应该按照你的期望工作,
void foo(int (***array))
{
int i;
*array = (int **) malloc(100*sizeof(int *)); //rows
for(i=0; i<100; i++){
(*array)[i] = malloc(50*sizeof(int));} //cols
*array[0][0] =10;
}
在main函数中,传递数组变量的地址。
foo(&array);
希望这有帮助!