为什么这个2D向量会导致段故障(核心转储)

时间:2016-03-28 23:38:29

标签: c++ vector size

#include <iostream>
#include <vector>

int main() 
{
    std::vector<std::vector<int>> a;
    a[0] = {1,2,3,4,5};
    a.push_back({12,123,123,1,3,1,23});
    size_t size = a.size();
    std::cout << size << std::endl;
}

g ++编译器传递了这个程序,但是当我运行它时会出现这个错误

分段错误(核心转储)

如何解决?如何计算这个2D矢量中的所有元素?

2 个答案:

答案 0 :(得分:6)

a[0] = { 1, 2, 3, 4, 5 }; std::vector您可以访问索引0的{​​{1}},但索引std::vector没有0,因此您可以访问内存,而不是{39}} ; t拥有,这会导致分段错误!您必须先分配空间(使用resize),或使用push_back,如下一行。

答案 1 :(得分:0)

您可以在创建矢量时指定第一行:

#include <iostream>
#include <vector>

int main()
{
    std::vector<std::vector<int>> a{{1,2,3,4,5}};
    a.push_back({12,123,123,1,3,1,23});
    size_t size = a.size();
    std::cout << size << std::endl;
}