返回本地变量的返回地址时出现分段错误(核心转储)

时间:2017-08-13 12:33:31

标签: c pointers segmentation-fault

我正在尝试在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 它说分段错误是一种特殊的错误,它是由访问“不属于你的内存”引起的。 但在我的情况下,我们怎么能说“记忆不属于我”。

请帮助我深入了解。 提前谢谢。

1 个答案:

答案 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);