为什么此 2D 向量会导致段错误(核心已转储)

Why this 2D vector cause the segment fault(core dumped)

#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++ 编译器通过了这个程序,但是当我 运行 它

分段错误(核心已转储)

如何解决?如何统计这个二维向量中的所有元素?

这里 a[0] = { 1, 2, 3, 4, 5 }; 你访问索引 0 处的 std::vector,但是索引 0 处没有 std::vector,所以你访问的内存你没有' own,这会导致分段错误!您必须先分配 space(使用 resize),或使用 push_back,如下一行。

您可以在创建向量时分配第一行:

#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;
}