簡體   English   中英

檢查指針數據時出現分段錯誤

[英]Segmentation fault at checking pointer data

我試圖在指定數據后的雙鏈表中插入數據,但顯示段錯誤。

void dllinsertafter(struct node **head,int data,int data1)
{
struct node *temp,*newnode;
newnode=(struct node*)malloc(sizeof(struct node));
newnode->data=data;
temp=*head;
while ((temp->data)!=data1)
    temp=temp->next;
newnode->next=temp->next;
temp->next->prev=newnode;
newnode->prev=temp;
temp->next=newnode;
}

不知道為什么錯誤發生在while(temp-> data!= data1)。使用的結構在雙鏈表中很常見。

因此,這里有一些一般性的想法:

  1. 您為temp分配內存,然后立即泄漏它。

  2. 在while循環中,如果永遠找不到 data1會發生什么?

    然后,對於某些節點, temp->next == NULL ,因此將為temp分配NULL ,然后嘗試取消引用temp ,以確保發生故障。

  3. WhozCraig指出了另一個故障原因 如果*head == NULL會發生什么。 也就是說,您從一個空列表開始? 在這種情況下,您將立即分配temp = NULL ,然后您將很快嘗試取消引用temp ,從而確保出現故障。

如果找不到data1,則會發生崩潰。 某些情況下處理不當,請更改以下邏輯以解決崩潰問題。

//check to prevent the crash if list is empty
if (*head == NULL)
{

    *head = newnode;
    newnode->previous = newnode->next = NULL;
}
else
{
    temp=*head;
    while(temp != NULL)
    {
        if((temp->data)==data1)break;
        temp=temp->next;
    }
    newnode->next=temp->next;
    //check to prevent the crash if data1 is last element
    if (temp->next != NULL)
    {
        temp->next->prev=newnode;
    }
    newnode->prev=temp;
    temp->next=newnode;
}

temp=(struct node*)malloc(sizeof(struct node)); -不需要此內存分配,這會在temp=*head;泄漏temp=*head;

暫無
暫無

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

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