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 :)
Sie verwirren sich 'if (newNode)' ergibt wahr, wenn der Speicher erfolgreich zugeordnet wurde. – smac89
'if (newNode)' -> 'if (! NewNode)' oder 'if (newNode == NULL)' – BLUEPIXY
Ä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). –