我正在尝试在ubuntu中编写一个C程序:一个函数返回局部变量的地址。
如下所示:
#include<stdio.h>
int *function();
int main(){
int *j;
j=function();
printf("i value : %d",*j);
return 0;
}
int *function(){
int i=10;
printf("In function : %u",&i);
return (&i);
}
我收到Segmentation fault(core dumped)。我看到了一些线程 stackoverflow.com 它说分段错误是一种特殊的错误,它是由访问“不属于你的内存”引起的。 但在我的情况下,我们怎么能说“记忆不属于我”。
请帮助我深入了解。 提前谢谢。
答案 0 :(得分:2)
您无法返回自动存储变量的地址,该地址位于function
的正文中,因为它已超出范围(已终止其生命周期) - &gt; (undefined behavior)。如果要从函数返回它,则需要在变量的堆上动态分配空间。
int * i = malloc (sizeof(int));
// Check if i != NULL
if (i == NULL) { perror("malloc failure"); exit(EXIT_FAILURE); };
return i;
然后您可以指定指针i
引用的值:
*i = 34;
别忘了在主
中释放记忆 free(i);