-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;
}
任何有關此問題的解釋會強烈意識到:)
你很困惑自己'如果(newNode)'評估爲true,如果內存分配成功。 – smac89
'if(newNode)' - >'if(!newNode)'或'if(newNode == NULL)' – BLUEPIXY
將if(newNode)更改爲if(newNode == NULL)'。你有這個測試逆轉的感覺。 'newNode'將不爲零,因此,如果對'malloc'的調用成功(即在正常情況下),則爲true。 –