Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
内存分配在c语言中是如何工作的? #包括 int*display(); main() { printf(“\nHello\n”); int*a=display(); printf(“%d”,*a); } int*display() { printf(“\n Hi\n”); int b=10; 返回&b; }_C - Fatal编程技术网

内存分配在c语言中是如何工作的? #包括 int*display(); main() { printf(“\nHello\n”); int*a=display(); printf(“%d”,*a); } int*display() { printf(“\n Hi\n”); int b=10; 返回&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

谁能告诉我在c语言中内存分配是如何工作的

我确信我们可以访问b的值(在这个程序中),那么为什么我们不能访问它的地址呢?我得到一个错误(分段错误)

它背后的概念是什么


我是初学者。

您不应该返回指向自动局部变量的指针。一旦函数返回,它将不再存在,因此将调用未定义的行为

您可以动态分配内存,然后返回指针:

#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;
  }