2016-04-18 59 views
-1

我只想嘗試插入和刪除雙向鏈表中的元素的代碼,但我不明白爲什麼此代碼顯示內存錯誤五次。當我刪除內存錯誤檢查部分,那麼這段代碼工作得很好。這裏是我的代碼(下面是實際的代碼只是一些部分)爲什麼雙向鏈接列表代碼顯示內存錯誤?

struct listNode { 
    int data; 
    struct listNode* next; 
    struct listNode* prev; 
}; 
typedef struct listNode Node; 
Node* head; 

void DLLInsert(int data, int position) 
{ 
    int k = 1; 
    Node* temp, *newNode; 

    newNode = (Node*)malloc(sizeof(Node)); 

    //Always check for memory errors 
    if(newNode) 
    { 
     printf("memory error"); 
     return; 
    } 
    newNode->data = data; 

    //Inserting a node at the beginning of the list 
    if(position == 1) 
    { 
     newNode->next = head; 
     newNode->prev = NULL; 
     if(head) 
     { 
      head->prev = newNode; 
     } 
     head = newNode; 
     return; 
    } 
    temp = head; 
    while((k<position-1)&&temp->next!=NULL) //traversal 
    { 
     temp=temp->next; 
     k++; 
    } 
    if(k!=position-1) 
    { 
     printf("Desired position does not exist\n"); 
    } 
    newNode->next = temp->next; 
    newNode->prev=temp; 

    if(temp->next) 
     temp->next->prev=newNode; 
    temp->next=newNode; 
    return; 
} 

任何有關此問題的解釋會強烈意識到:)

+0

你很困惑自己'如果(newNode)'評估爲true,如果內存分配成功。 – smac89

+0

'if(newNode)' - >'if(!newNode)'或'if(newNode == NULL)' – BLUEPIXY

+0

將if(newNode)更改爲if(newNode == NULL)'。你有這個測試逆轉的感覺。 'newNode'將不爲零,因此,如果對'malloc'的調用成功(即在正常情況下),則爲true。 –

回答

0

我覺得你把支票是錯誤的。它必須像下面這樣:

if (NULL == newNode) OR if (!newNode) 
{ 
    //your code 
}