deletecinvoidinsert()打印无限数,如果我将其注释掉,我会得到正确的输出

这个程序在 cpp 中创建并打印一个链接列表 当这个程序运行一个无限的 no。的数字开始在控制台打印

#include <cstdlib>
#include <iostream>
using namespace std;

class Node {
    public:
        int data;
        Node* next;
};

class Node* head = NULL;
int length = 0;

在这个函数中,如果我注释掉 delete c 那么它就起作用了,我不知道为什么 delete c 会导致问题

void insert(int data) {
    class Node* newNode = NULL;
    newNode = new Node();
    newNode->data = data;
    newNode->next = NULL;
    if(head == NULL) {
        head = newNode;
        length++;
    }
    else {
        class Node* c = head;
        while(c->next != NULL) {
        c = c->next;
        }
        c->next = newNode;
        length++;
        delete c;
    }
}

这里 delete c 没有问题

void print() {
    class Node* c = head;
    while(c != NULL) {
        cout<<c->data<<endl;
        c = c->next;
    }
    cout<<"Length of link list = "<<length<<endl;
    delete c;
}

主功能

int main() {
    cout<<"Hello Wrold"<<endl;
    insert(5);
    insert(10);
    insert(15);
    insert(20);
    print();
    getchar();
    return 0;
}

回答

在您的insert函数中,循环条件是c->next != NULL。因此c在循环后指向一个正在使用的节点,并delete c;破坏该节点并造成麻烦。

另一方面,print函数中的循环条件是c != NULL。因此cNULL在循环之后并且delete c;不会造成麻烦,因为删除NULL被定义为什么都不做。


以上是deletecinvoidinsert()打印无限数,如果我将其注释掉,我会得到正确的输出的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>