使用<vector>和<fstream>时出现C++分段错误

Pet*_*now 1 c++ fstream vector segmentation-fault ostream

我正在使用3D矢量,一切都很完美.当我添加并使用ofstream文件时出现Segmentation Fault.我根本不明白这个问题.以下代码不起作用:

#include <iostream>
#include <vector>
#include <fstream>

std::vector < std::vector < std::vector <float> > > hand;


int main(){

//First Part
std::ofstream file;
file.open("test.csv");
file << "Hello World!";
file.close();

//Second Part
hand.reserve(20);
for (int i=0; i<hand.capacity(); i++){
    hand[i].reserve(4);
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果您评论其中一个部分代码将完美地工作.当您想要同时使用它们时,会出现"分段"错误.

同样重要的是要注意代码可以工作,而不是:

hand.reserve(20);
Run Code Online (Sandbox Code Playgroud)

我们使用低于8的数字:

hand.reserve(7); //or lower
Run Code Online (Sandbox Code Playgroud)

我的问题是:当我同时使用它们时,为什么代码不能正常工作?我该怎么办才能修复它?你对这个特殊情况有什么解释吗?

我将不得不在一个更大的代码中实现它,所以最好知道根本原因并在下一种情况下避免它.

ale*_*der 5

更改

hand.reserve(20);
Run Code Online (Sandbox Code Playgroud)

hand.resize(20);
Run Code Online (Sandbox Code Playgroud)

reserve只会更改矢量容量来存储数据,而不会创建任何实际对象.因此,使用reserve您将获得仍为空的向量,即无需重新分配即可接受20个新值.capacity()size()它返回向量已经为其分配内存的元素数量不同,它可以大于size()返回实际元素数量.