首页 > 解决方案 > 如果我不使用“new”关键字,为什么会出现分段错误?

问题描述

以下代码生成分段错误。如果我在堆上为我的 node1 分配内存,我不会遇到分段错误。( Node* node1 = new Node)。我的问题是为什么我现在会出现分段错误?line不应该Node* node1;在堆栈上为我的 node1 获取内存吗?

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

int main(){
    Node* node1;
    node1->data = 5;

    cout << node1->data << endl;
}

我打印了 node1 的地址并添加了一条 cout 行:

int main(){
    Node* node1;
    cout << &node1 << endl;
    node1->data = 5;

    cout << node1->data << endl;
}

现在错误消失了。每当我评论 cout 行时,错误就会回来。谁能解释这种行为?

标签: c++linked-listsegmentation-fault

解决方案


line不应该在堆栈上Node* node1;为我获取内存吗?node1

Node* node1;在堆栈上为指针获取内存node1。但是,在那之后,指针node1未初始化并且没有指向任何有效的地方。这就是为什么您需要在更改它指向的数据之前使其指向某个有效的位置,而这样做的一种方法是使用new.


推荐阅读