2016-04-18 9 views
-1

Ich möchte nur einen Code zum Einfügen und Löschen des Elements aus der doppelt verknüpften Liste versuchen, aber ich verstehe nicht, warum dieser Code fünfmal Speicherfehler zeigt. Wenn ich den Gedächtnisfehler entferne, der Teil überprüft, funktioniert dieser Code tadellos gut. Hier ist mein Code (unten ist nur ein Teil des eigentlichen Code)Warum doppelt verknüpfte Liste Code zeigt Speicherfehler?

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; 
} 

Jede Erklärung dieses Verhaltens in Bezug auf würde sehr geschätzt :)

+0

Sie verwirren sich 'if (newNode)' ergibt wahr, wenn der Speicher erfolgreich zugeordnet wurde. – smac89

+0

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

+0

Ändere 'if (newNode)' in 'if (newNode == NULL)'. Sie haben den Sinn des Tests umgekehrt. "newNode" ist nicht Null und somit wahr, wenn der Aufruf von "malloc" erfolgreich ist (d. h. im Normalfall). –

Antwort

0

Ich denke, die Kontrolle Sie setzt falsch ist. es muss wie folgt sein:

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