我试图从我的用户得到的数字,这是我的职责,打印动态数组
我的功能得到改编为指针,将其设置为一个新的数组并返回,我得到的数量的计数器打印。
,但是当我尝试打印数组我得到一个错误疗法被提
int GetNumber(int *arr)
{
int n,i=0;
int *temp;
temp = (int*)calloc(1,sizeof(int));
assert(temp);
scanf("%d",&n);
while(n != -1)
{
i++;
temp = (int*) realloc(temp,i*sizeof(int));
assert(temp);
temp[i-1] = n;
scanf("%d",&n);
}
arr = temp;
return i;
}
您只修改当前堆栈帧上的指针地址,而不是调用的地址。你应该使用'int ** arr'作为参数并且使用'* arr = realloc(* arr,...)'来重新分配,并且因此将一个指针传递给一个int指针,如下所示:'GetNumber(&the_arr)' – Cheatah
而不是'realloc'并将返回值分配给您的原始变量。如果'realloc'失败,原始的'temp'不会被释放,并且'NULL'被返回并分配给'temp',导致您失去对'temp'所指向的内存块的引用,从而产生内存泄漏。而是使用临时指针,例如'void * t = realloc(temp,i * sizeof * temp);如果(t)temp = t;' –