使用vector初始化链表时c ++分段错误

Jus*_*tFF 1 c++ segmentation-fault

我打算使用向量初始化链表

这是代码:

#include <vector>
#include <iostream>

using namespace std;

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

int main() {
    int n = 10;
    vector<ListNode> vecListNode;
    for (int i = 0; i != n; ++ i) {
        vecListNode.push_back(ListNode(i));
        if (i) {
            vecListNode[i-1].next = &vecListNode[i];
        }
    }
    ListNode *root = &vecListNode[0];
    while (root) {
        cout << root->val << endl;
        root = root->next;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,我得到:

0

1

分段错误:11

我正在使用macintosh,默认g ++,非常感谢

Ker*_* SB 5

存储矢量元素的地址是不安全的.当您改变容器时(例如,通过插入元素),向量元素的引用和迭代器将无效.

(你可以通过reserve()在开始之前调用向量使代码工作,但它仍然在概念上是错误的.据推测,向量应该存储指向动态分配的列表节点对象的指针,或者可能存在一些其他形式的间接(例如对向量的引用)和索引).)