通过索引访问指向vector元素时出现段错误 - 出错了什么?

时间:2018-02-27 22:37:40

标签: c++ pointers vector

我创建了一个指向向量并向其添加成员的指针但是我无法通过索引调用该成员而不会出现seg错误。这是为什么? 当我使用back()方法时,我可以很好地访问它。

使用索引的示例:

#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> * a;
  a->push_back(2);
  cout<< (*a)[0] << endl;
}
// Segmentation fault (core dumped)

使用back()的示例:

#include <iostream>
#include <vector>

using namespace std;

int main() {
  vector<int> * a;
  a->push_back(2);
  cout<< (*a).back() << endl;
}
// 2

这是否意味着我的矢量背面不是索引= 0?

1 个答案:

答案 0 :(得分:0)

使用back()的示例是错误的。在使用它之前,你应该new一个矢量对象:

a = new vector<int>();

是的,您的代码会编译。不同的编译器具有不同的初始值a。在我的系统上,aNULL,因此会在a->push_back(2)上抛出“段错误”。

尝试不同的编译器,结果会有所不同。

我不确定如果a有未初始化的值会发生什么,但这很危险。