内存分配如何在c中工作?

时间:2017-02-17 14:21:36

标签: c

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

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

我确定我们可以访问b的值(在此程序中),那么为什么我们无法访问它的地址?我收到错误(分段错误)。

它背后的概念是什么?

我是初学者。

1 个答案:

答案 0 :(得分:2)

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

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

  int * display()
  {
      printf("\n Hi \n");

      int *b = malloc(sizeof(int));
      *b = 10;
      return b;
  }