执行返回整数指针的函数时出现分段错误(核心转储)错误

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)

在执行上述代码时,抛出分段错误错误.

谁能解释这种行为?

thi*_*his 7

您在两者中都出错,这会导致未定义的行为.

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)

取消引用不指向任何有效内存的指针