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

时间:2017-02-17 11:37:06

标签: c pointers segmentation-fault initialization

每当我尝试运行此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;
}

它最初没有r,但我必须将r s添加为i的别名,然后添加print语句以输出取消引用的值qr

4 个答案:

答案 0 :(得分:6)

在您的代码中

p,r = &i;

未指定p,但未初始化p。接下来,当您取消引用p(和q时,因为它已被赋值为p)  undefined behavior,因为您正在取消引用无效内存。

您需要使用

p = r = &i;

使用正确的警告编译您的代码,并且使用您的代码,您应该看到与

类似的内容
  

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

 p,r = &i;
  ^

答案 1 :(得分:1)

使用此:

p = &i;
r = &i;

而不是

p,r = &i;

未初始化的指针很糟糕。

答案 2 :(得分:0)

//I write that as an answer because i still don't have 50 reputation

1:我不明白你希望程序能做什么。使用q和r是没用的。

2: p,r=&i;不是一个好的命令。使用p=r=&ip=&i; r=&i;p=&i; r=p;

答案 3 :(得分:0)

我已经在您的代码中进行了更正,并且工作正常,请仔细研究。

`#include <stdio.h>

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