内存分配在c语言中是如何工作的? #包括 int*display(); main() { printf(“\nHello\n”); int*a=display(); printf(“%d”,*a); } int*display() { printf(“\n Hi\n”); int b=10; 返回&b; }
谁能告诉我在c语言中内存分配是如何工作的 我确信我们可以访问b的值(在这个程序中),那么为什么我们不能访问它的地址呢?我得到一个错误(分段错误) 它背后的概念是什么内存分配在c语言中是如何工作的? #包括 int*display(); main() { printf(“\nHello\n”); int*a=display(); printf(“%d”,*a); } int*display() { printf(“\n Hi\n”); int b=10; 返回&b; },c,C,谁能告诉我在c语言中内存分配是如何工作的 我确信我们可以访问b的值(在这个程序中),那么为什么我们不能访问它的地址呢?我得到一个错误(分段错误) 它背后的概念是什么 我是初学者。您不应该返回指向自动局部变量的指针。一旦函数返回,它将不再存在,因此将调用未定义的行为 您可以动态分配内存,然后返回指针: #include<stdio.h> int * display(); main() { printf("\nHello\n"); int * a = display
我是初学者。您不应该返回指向自动局部变量的指针。一旦函数返回,它将不再存在,因此将调用未定义的行为 您可以动态分配内存,然后返回指针:
#include<stdio.h>
int * display();
main()
{
printf("\nHello\n");
int * a = display();
printf("%d", *a);
}
int * display()
{
printf("\n Hi \n");
int b = 10;
return &b;
}
你可以;他的代码显示了如何。你不应该;有一个副本(或二十个副本)上写着“不要这样做”。你可以返回,你不能取消引用。@JonathanLeffler;更正了此问题。程序具有未定义的行为,因为函数返回指向在退出函数后将不活动的局部变量的指针。请阅读以下内容:。AFAIK这是有关此问题的SO上查看次数最多的OP。它被标记为
c++
,但概念是相同的,它有一个Eric Lippert的比较实用和有趣的类比:
int * display()
{
printf("\n Hi \n");
int *b = malloc(sizeof(int));
*b = 10;
return b;
}