我开始研究指针,我在下一个代码遇到了一些麻烦:
#include <stdio.h>
int * g()
{
int a = 10;
return &a;
}
void main()
{
int *p;
p=g();
printf("%d",*p);
}
它返回错误segmentation fault. core dumped
我真的会帮助你。祝你有愉快的一天!
答案 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;
}