簡體   English   中英

C - 帶指針的函數出現分段錯誤

[英]C - Segmentation fault on function with pointers

我有一個結構類型的 6 個元素的列表:

struct entry
{
    int value;
    struct entry *next;
};

我正在嘗試通過為每個值成員分配一個隨機 int 來創建一個函數來初始化這六個元素。

void initializeList(struct entry *l_p)
{
    while(l_p!=_END)
    {
        l_p->value=rand()%999;
        l_p=l_p->next;
    }
}

在 main 中調用此函數時, *l_p指向列表的第一個元素。 _END是一個全局常量,定義如下:

struct entry const *_END=(struct entry *)0;

現在,每次我運行我的代碼時,我都會得到這個:

分段錯誤(核心轉儲)

進程返回 139 (0x8B)

我知道這意味着我正在嘗試訪問我不允許訪問的一部分內存,但我不知道如何修復我的代碼。 另外,我很確定問題是由initializeList引起的,因為如果我刪除它並手動初始化列表的每個元素,程序運行順利。

對不起大家,我的錯。 我一直試圖弄清楚很長時間,現在,經過 5 分鍾的休息,我可以看到由於我的列表沒有初始化並且元素沒有相互鏈接,我無法運行順序掃描它。 再說一次,我的錯,我還是個菜鳥,有很多東西要學:)

其實這里有一個錯誤:

    l_p->value=rand()%999;
    l_p=l_p->next;

您尚未為 l_p 分配內存,然后嘗試在導致分段錯誤的受限區域中分配值。

你可以試試這個

void initializeList(struct entry *l_p)
{
    l_p=(struct entry *)malloc(sizeof(struct entry));
    l_p->next=NULL;
    struct entry *pointer,* back=l_p;
    for(int i=0;i<5;i++)
    {
        pointer=(struct entry *)malloc(sizeof(struct entry));
        pointer->next=NULL;
        back->next=pointer;
    }
    for(int i=0;i<6;i++)
    {
        l_p->value=rand()%999;
        l_p=l_p->next;
    }
}

我創建了 6 個節點,並在前 9 行中將它們連接起來。

然后在下一行中為它們中的每一個賦值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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