簡體   English   中英

C中此指針程序中的分段錯誤

[英]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語句以輸出qr的解引用值。

在你的代碼中

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=&ip=&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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM