gpt4 book ai didi

c - 函数总是返回指向 null 的指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:56 24 4
gpt4 key购买 nike

为什么 createArray 函数返回指向 0 的指针?我想,我应该使用 malloc 来修复它,但为什么呢?

   int *createArray(int size)
{
int i;
int arr[size];

i = 0;
while (i < size)
{
arr[i] = i;
i++;
}
return arr;
}

int main()
{
int *ar;
printf("%i", (createArray(10)));
}

最佳答案

当您从函数返回一个数组时,实际上是返回一个指向数组第一个元素的指针。并且当函数返回时,其局部变量使用的内存不再有效。

因此,您将返回一个指向不再存在的变量的指针。以任何方式使用该指针都会调用 undefined behavior .在这种特殊情况下,无效地址可以被取消引用并且恰好包含值 0,但是不能保证在您对程序进行更改时行为会保持一致。

为此,您需要动态分配内存。然后它可以在程序的整个生命周期中使用。

int *arr = malloc(sizeof(*arr) * size);

这也意味着您需要在使用完毕后释放此内存:

int *ar = createArray(10);
printf("%i", ar[0]);
free(ar);

关于c - 函数总是返回指向 null 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52934897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com