【问题标题】:How to store a node in an array C++?如何将节点存储在数组 C++ 中?
【发布时间】:2020-07-16 19:37:51
【问题描述】:

这不是将节点存储在数组中的一种方式吗?当我尝试运行它时,我遇到了分段错误。我知道如果您尝试访问您无权访问的内存,就会发生这种情况。 在这段代码中,我不是在数组中分配一个节点并打印它的数据吗?

struct Node{
    int data;
    struct Node* next;
};
struct Node* head = NULL;
int main(){
    struct Node* arr[10];
    head->data = 2;
    head->next = NULL;
    arr[1] = head;
    std::cout << arr[1]->data;

}

【问题讨论】:

    标签: c++ arrays linked-list segmentation-fault nodes


    【解决方案1】:

    您在这里处理的不是Nodes,而是Node 指针。它们没有指向有效的内存,除非你分配它。

    另外,不要使用NULL,而是使用nullptr

    head = nullptr;
    head->data = 42; // this is UB, could be a segfault
    

    如果你想这样做,你必须分配它

    head = new Node{};
    head->data = 42; //ok
    

    同样的逻辑适用于arr

    arr[1] = new Node{}; // now arr[1] is pointing to valid memory
    

    不过,我不确定您为什么需要一个 Node 指针数组。你的 Node 结构看起来像一个传统的链表节点,并且有一个 linked-list 标签,所以我猜你想实现链表。

    在这种情况下,您根本不需要节点指针数组。整个链表应通过head 连接。

    如果你只想要一个节点数组,那么你可以这样做,根本不用担心内存分配。

    Node arr[10] {};
    arr[1].data = 42; // ok
    

    【讨论】:

    • 既然 OP 说他们想要一个节点数组,那么值得一提的是,一个替代方案是实际上有一个节点数组Node arr[10]; 这摆脱了内存分配问题。当然,OP 可能没有正确表达自己。
    • 我需要制作一个表达式树。所以,我想将一棵树存储在一个数组中,以便以后使用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多