基本指针练习错误

时间:2016-12-05 07:16:16

标签: c

我开始研究指针,我在下一个代码遇到了一些麻烦:

#include <stdio.h>

int * g()
{
    int a = 10;
    return &a;
}

void main()
{ 
    int *p;
    p=g();
    printf("%d",*p);
}

它返回错误segmentation fault. core dumped

我真的会帮助你。祝你有愉快的一天!

1 个答案:

答案 0 :(得分:3)

您正在返回本地变量的地址。当您离开该函数时,您的代码不再知道此变量,因此分段错误。 您必须将指向此函数的指针作为参数,或者在堆中为此变量动态创建内存。

e.g。

void g(int* p) {
  *p = 10;
}

int main() {
  int a;
  g(&a);
  printf("%d", a);
  return 0;
}

int* g() {
  int* p = (int*) malloc(sizeof(int));
  *p = 10;
  return p; 
}

int main() {
  int* p;
  p = g();
  printf("%d", *p);
  free(p)
  return 0;
}