0 c
以下程序运行正常
#include <stdio.h>
#include <string.h>
int * p(void);
main()
{
int *x = p();
printf("%d", *x);
}
int * p(void)
{
int x;
x=10;
return (&x);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我像这样修改上面的程序
#include <stdio.h>
#include <string.h>
int * p(void);
main()
{
int *x = p();
printf("%d", *x);
}
int * p(void)
{
int *x;
*x=10;
return (x);
}
Run Code Online (Sandbox Code Playgroud)
在执行上述代码时,抛出分段错误错误.
谁能解释这种行为?
您在两者中都出错,这会导致未定义的行为.
1.
int * p(void)
{
int x;
x=10;
return (&x); <---
}
Run Code Online (Sandbox Code Playgroud)
返回一个局部变量的地址,该变量在返回后停止存在
2.
int * p(void)
{
int *x;
*x=10; <---
return (x);
}
Run Code Online (Sandbox Code Playgroud)
取消引用不指向任何有效内存的指针