int*func();
int main()
{
int i;
int *ptr;
ptr=func();
for(i=0;i<10;i++)
{
printf("%d ",*ptr);
ptr++;
}
}
int* func()
{
int arr[10];
int i;
for( i=0;i<10;i++)
arr[i]=i+1;
return arr;
}
为什么我的输出不是1,2,3,4,5,6,7,8,9,10 ??
我从func()返回数组的地址但是 我仍然得到垃圾值。
答案 0 :(得分:1)
答案是&#34;范围&#34;。如果使用gcc编译,则会收到一个非常明显的警告:
C:\tmp>gcc test.c
test.c: In function `func':
test.c:22: warning: function returns address of local variable
当函数退出并清除其内存分配时,局部变量将丢失。
如果你想从一个函数返回一个数组,你需要malloc
它来创建一个非本地的内存分配,然后返回指针。
答案 1 :(得分:1)
您将返回一个指向局部变量的指针,这会导致未定义的行为。
处理返回数组的函数的最常用方法是从调用者传入数组,例如修复版代码:
void func(int arr[]);
int main()
{
int arr[10];
func(arr);
for (int i = 0; i < 10; i++)
printf("%d ", arr[i]);
return 0;
}
void func(int arr[])
{
for (int i = 0; i < 10; i++)
arr[i] = i + 1;
}