【问题标题】:Why doubly linked list code is showing memory error?为什么双向链表代码显示内存错误?
【发布时间】: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


【解决方案1】:

我认为你的支票是错误的。它必须如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2014-10-22
    • 2018-05-09
    相关资源
    最近更新 更多