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 ++,非常感谢
存储矢量元素的地址是不安全的.当您改变容器时(例如,通过插入元素),向量元素的引用和迭代器将无效.
(你可以通过reserve()在开始之前调用向量来使代码工作,但它仍然在概念上是错误的.据推测,向量应该存储指向动态分配的列表节点对象的指针,或者可能存在一些其他形式的间接(例如对向量的引用)和索引).)