【发布时间】:2016-08-09 16:14:45
【问题描述】:
我只是想尝试一个从双向链表中插入和删除元素的代码,但我不明白为什么这段代码显示内存错误五次。当我删除 内存错误检查 部分时,此代码可以正常工作。这是我的代码(以下只是实际代码的一部分)
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;
}
任何有关此行为的解释将不胜感激:)
【问题讨论】:
-
你自己搞糊涂了
if(newNode)如果内存分配成功,则计算结果为真。 -
if(newNode)-->if(!newNode)或if(newNode==NULL) -
将
if (newNode)更改为if (newNode == NULL)。你对测试的感觉被颠倒了。newNode将非零,因此如果对malloc的调用成功(即在正常情况下),则为 true。 -
哦,对不起,我解释错了!非常感谢您的帮助@Smac89
标签: c data-structures linked-list doubly-linked-list