C中此指针程序中的分段错误

Hai*_*er 0 c pointers initialization segmentation-fault

每当我尝试运行此C程序时,我都会收到分段错误(核心转储)消息.

#include <stdio.h>

int main()
{
    int i = 200, *p, *q, *r;
    p,r = &i;
    q = p;
    *q = *p + 1;
    printf("*p = %d\n", *p);
    printf("*r = %d\n", *r);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它没有任何r的第一秒,但我不得不添加rS作为一个别名i,然后打印语句添加到输出的提领值qr.

Sou*_*osh 6

在你的代码中

p,r = &i;
Run Code Online (Sandbox Code Playgroud)

没有分配p,它没有p初始化.接下来,在您取消引用的那一刻p(以及q,因为它被分配了值p),您将点击 未定义的行为,因为您正在取消引用无效的内存.

你需要使用

p = r = &i;
Run Code Online (Sandbox Code Playgroud)

编译代码并启用适当的警告,并且使用您的代码,您应该看到类似的内容

警告:逗号表达式的左侧操作数无效[-Wunused-value]

 p,r = &i;
  ^
Run Code Online (Sandbox Code Playgroud)