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)
我的问题是:当我同时使用它们时,为什么代码不能正常工作?我该怎么办才能修复它?你对这个特殊情况有什么解释吗?
我将不得不在一个更大的代码中实现它,所以最好知道根本原因并在下一种情况下避免它.
更改
hand.reserve(20);
Run Code Online (Sandbox Code Playgroud)
至
hand.resize(20);
Run Code Online (Sandbox Code Playgroud)
reserve
只会更改矢量容量来存储数据,而不会创建任何实际对象.因此,使用reserve
您将获得仍为空的向量,即无需重新分配即可接受20个新值.capacity()
与size()
它返回向量已经为其分配内存的元素数量不同,它可以大于size()
返回实际元素数量.