gpt4 book ai didi

c - 从函数返回数组地址

转载 作者:行者123 更新时间:2023-11-30 17:28:44 26 4
gpt4 key购买 nike

我试图将数组地址从函数传递到正在完美发生的主函数。但是当我取消引用 main() 中的地址时,我得到了垃圾值。我猜测 array_address 内存中的变量仅存在于函数的范围内。如果是这种情况,如何将函数内生成的数组返回到另一个函数?

这是我的代码:

int* letssee(int something)
{
int* array_address;
int a[10], i=0;
array_address = &a[0];

for (i; i<something;i++)
{
*(array_address+i) = i;
printf("\n%p, %d",(array_address+i), *(array_address+i));

}

return array_address;

}

int main()

{
int i= 5,j;
int* catch_address;
catch_address = letssee(i);

printf("\n");
for (j= 0; j<i; j++)
{
printf("%p, %d\n", (catch_address+j),*(catch_address+j));
}

return 0;
}

最佳答案

您无法返回函数中定义的数组,因为它是在堆栈上分配的,并且会在函数完成后消失。相反,您分配内存

int *array_address = malloc(sizeof(int) * 10);

但是,你必须管理内存,这意味着当你使用完它时你必须“释放”它,否则你会泄漏内存

另一种方法是将预分配的内存传递给函数(无论是通过 malloc、堆栈还是全局)

int* letsee(int something, int* array_address, int count);

如果您只是将数组设为静态,则实际上是在创建一个全局变量,对该函数的多次调用将返回相同的地址,并且如果您希望每次调用都有新的数组,则可能会导致奇怪的行为。

关于c - 从函数返回数组地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25965690/

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