我试图将数组地址从函数传递给正在发生的主函数。但是当我取消引用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;
}
答案 0 :(得分:0)
您无法返回函数中定义的数组,因为它在堆栈上分配,并在函数完成后消失。而是分配内存
int *array_address = malloc(sizeof(int) * 10);
然而,你必须管理记忆,这意味着你必须&#34;免费&#34;当你完成它,否则你将泄漏记忆
另一种方法是将预分配的内存传递给函数(无论是通过malloc还是堆栈还是全局)
int* letsee(int something, int* array_address, int count);
如果您只是将数组设为静态,那么您实际上是在创建一个全局变量,对函数的多次调用将返回SAME地址,如果您希望每次调用都有新数组,则可能会导致奇怪的行为。