【问题标题】:C++ Linked List Pointer to Struct Crashing指向结构崩溃的 C++ 链表指针
【发布时间】:2016-04-10 23:07:37
【问题描述】:

当我为我的类 LinkedList 调用默认构造函数时,我尝试在发生任何其他操作之前将值分配给链表的头节点。我已通过调试将错误隔离到默认构造函数中的说明。尽快

    head -> next = NULL;
    head -> RUID = 0;
    head -> studentName = "No Student in Head";

被称为程序崩溃。当我在 main 中调用默认构造函数时会发生这种情况。 这是我的类声明和结构声明以及默认构造函数:

struct Node
{
    string studentName;
    int RUID;
    Node* next;
};

class LinkedList
{
private:

    // Initialize length of list 
    int listLength;

public:
    // Head of the list, which points to no data yet
    Node *head;
    LinkedList();
    bool insertNode(Node* newNode, int position);
    int generateRUID(); 

};


LinkedList::LinkedList()
{

    head -> next = NULL;
    head -> RUID = 0;
    head -> studentName = "No Student in Head";

    listLength = 0; 
}

我相信这个问题的所有相关代码。如果有人能阐明这一点,将不胜感激。

【问题讨论】:

  • head 必须在所有其他人之前初始化。 LinkedList::LinkedList 开头的引用为空。

标签: c++ pointers struct linked-list


【解决方案1】:

LinkedList::headNode*,而不是 Node,并且您没有对其进行初始化,因此对象(二进制,内存中)表示是未定义的,因此存在取消引用的危险。

更改您的 LinkedList 以显式初始化 head 成员。我建议将其按值存储(如Node)而不是简单地存储为堆分配值(Node*),除非您知道需要重新设置节点。

使用Node*

LinkedList::LinkedList() :
    head( Node() ),
    listLength( 0 )
{
    this->head->next = nullptr;
    this->head->RUID = 0;
    this->head->studentName = "No Student in Head";
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2021-07-14
    • 1970-01-01
    • 2021-12-25
    • 2017-01-04
    • 2020-05-10
    • 2021-01-12
    相关资源
    最近更新 更多