我每当我尝试运行此C程序时都会收到分段故障(核心倾倒)消息。
#include <stdio.h>
int main()
{
int i = 200, *p, *q, *r;
p,r = &i;
q = p;
*q = *p + 1;
printf("*p = %dn", *p);
printf("*r = %dn", *r);
return 0;
}
起初它没有任何r
s,但我必须将r
S作为别名添加到i
中,然后添加打印语句以输出q
和r
的验证值。
在您的代码
中p,r = &i;
没有分配p
,它会使p
非初始化。接下来,当您放弃p
的那一刻(以及q
,也要分配了p
的值) 未定义的行为,因为您会删除无效的内存。
您需要使用
p = r = &i;
启用了适当的警告来编译您的代码,并且使用代码,您应该看到类似于
的东西警告:逗号表达的左手操作数没有效果[-wunused-value]
p,r = &i; ^
使用以下:
p = &i;
r = &i;
而不是
p,r = &i;
非初始化的指针不好。
//I write that as an answer because i still don't have 50 reputation
1:我不明白您想要该程序会做什么。Q和R的使用是没有用的。
2: p,r=&i;
不是一个好命令。使用p=r=&i
或p=&i; r=&i;
或 p=&i; r=p;
我已经在您的代码中进行了更正,并且可以很好地研究它。
`#include <stdio.h>
int main()
{
int i = 200, *p, *q, *r;
p = &i;
r = &i;
q = p;
*q = *p + 1;
printf("*p = %dn", *p);
printf("*r = %dn", *r);
return 0;
}`