[英]segmentation fault in this pointers program in C
每當我嘗試運行此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語句以輸出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=&i;
或p=&i; r=p;
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 = %d\n", *p);
printf("*r = %d\n", *r);
return 0;
}`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.