错误C6011:取消引用NULL指针'NAME'。 C ++

问题描述 投票:0回答:1

如标题中所示,我的代码给出了上述警告并混搭了内存引用。我的任务是在C ++中使用嵌套类。这段代码主要是我的代码,用于以前的C应用程序中的链表,但针对C ++进行了重新制作。我已经在互联网上搜索了有关NULL异常的信息,但无法弄清。我会发布代码,希望有人能给我一些提示。在Internet上的各种链接和技巧中,它表示我指向的指针是指向NULLptr的,并且不能访问NULL地址。试图以各种形式对其进行审查,但它不起作用。

标题

#ifndef LIST_H
#define LIST_H

#include <iostream>
#include <math.h>
using namespace std;

class List
{
private:
    class Node {
    public:
        int data;
        Node* next;
        Node() {
            this->data = NULL;
            this->next = NULL;
        }
    };
    Node* head;
public:
    List();
    void insertList(int data);
    void deleteFromList(int data);
    void deleteLowerThan(int lower);
    void calculateArithmetic();
    void showList();
};

#endif

Cpp文件


List::List() {
    this->head = NULL;
}

void List::insertList(int n) {
    Node* new_node = new Node();


    new_node->data = n;

    new_node->next = head;

    head = new_node;

}

void List::deleteFromList(int n) {
    Node* temp = head;
    Node* prev = NULL;

    if (temp != NULL && temp->data == n) {
        head = temp->next;
        return;
    }

    while (temp->data != n && temp != NULL) {
        prev = temp;
        temp = temp->next;
    }

    if (temp == NULL) return;

    prev->next = temp->next;
}

void List::deleteLowerThan(int n) {
    Node* temp = head;
    while (temp != NULL) {
        if (temp->data < n) {
            deleteFromList(temp->data);
        }
        else {
            temp = temp->next;
        }
    }
}

void List::showList()
{
    Node* temp = head;
    while (temp != NULL)
    {
        cout << temp->data << " ";
        temp = temp->next;
    }
}

驱动程序



int main() {
    List lista;
    lista.insertList(2);
    lista.insertList(4);
    lista.insertList(6);
    lista.insertList(8);
    lista.insertList(3);
    lista.insertList(1);
    lista.insertList(-4);
    lista.showList();
    lista.deleteFromList(4);
    lista.showList();
    lista.deleteFromList(8);
    lista.showList();
    lista.deleteFromList(6);
    lista.showList();
    lista.deleteLowerThan(3);
    lista.showList();

    return 0;
}
c++ inner-classes null-pointer
1个回答
0
投票

问题出在您的deleteFromList函数中,使用以下代码:

while (temp->data != n && temp != NULL) {
//...

这里,您正在尝试检查temp->data 之前]的值,已验证temp是否为NULL。因此,您将在某个时候(当您位于列表的末尾,并且temp is NULL会取消引用空指针-这不好!

相反,只需反转比较的顺序:

while (temp != NULL && temp->data != n) {
//...

这样,一旦tempNULL,将完全知道比较结果(请参阅short circuiting),将评估temp->data not

,并且循环将停止运行。
© www.soinside.com 2019 - 2024. All rights reserved.