C++ 为什么运行向量数组后会出现分段错误
可能是重复的对不起:/C++ 为什么运行向量数组后会出现分段错误,c++,C++,可能是重复的对不起:/ #include <iostream> #include <string> #include <vector> #include <fstream> #include <boost/algorithm/string.hpp> using namespace std; class CSVReader{ string fileName; string delimeter; public: C
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <boost/algorithm/string.hpp>
using namespace std;
class CSVReader{
string fileName;
string delimeter;
public:
CSVReader(string filename, string delm = ",") :
fileName(filename), delimeter(delm)
{ }
vector<vector<string> > getData();
};
vector<vector<string> > CSVReader::getData(){
ifstream file(fileName);
vector<vector<string> > dataList;
string line = "";
while (getline(file, line)){
vector<string> vec;
boost::algorithm::split(vec, line, boost::is_any_of(delimeter));
dataList.push_back(vec);
}
file.close();
return dataList;
}
int main(){
int counter=-1;
CSVReader reader("ncov_confirmed.csv");
vector<vector<string> > confirmed = reader.getData();
reader = CSVReader("ncov_deaths.csv");
vector<vector<string> > deaths = reader.getData();
reader = CSVReader("ncov_recovered.csv");
vector<vector<string> > recovered = reader.getData();
vector<vector<string> > output;
output.resize(2592);
for (auto &inner : output){
inner.resize(6);
}
for(int j = 0; j<36; j++){
for(int i = 4; i<40; i++){
for(int k = 0; k<72; k++){
counter++;
output[counter][0]=confirmed[0][i];
cout << counter << "\t" << output[counter][0] << "\t" << confirmed [0][i] << endl;
}
}
}
cout << "end";
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
CSVReader类{
字符串文件名;
细绳测力仪;
公众:
CSVReader(字符串文件名,字符串delm=“,”):
文件名(fileName),delimeter(delm)
{ }
向量getData();
};
向量CSVReader::getData(){
ifstream文件(文件名);
矢量数据表;
字符串行=”;
while(getline(文件,行)){
向量向量机;
boost::algorithm::split(vec,line,boost::是(delimeter)中的任意一个);
数据列表。推回(vec);
}
file.close();
返回数据列表;
}
int main(){
int计数器=-1;
CSVReader阅读器(“ncov_confirm.csv”);
向量已确认=reader.getData();
reader=CSVReader(“ncov_death.csv”);
向量死亡=reader.getData();
reader=CSVReader(“ncov_recovered.csv”);
vector recovered=reader.getData();
矢量输出;
输出。调整大小(2592);
用于(自动和内部:输出){
内部。调整大小(6);
}
对于(int j=0;jWelp,我发现了我的错误tho。我创建了一个向量输出[2592][6],我的计数器高达103680。就像我把2592个苹果放进一个盒子,现在我正试图找到第103680个苹果。不可能吧?所以正确的代码应该是:
for(int i = 4; i<40; i++){
for(int k = 0; k<72; k++){
counter++;
output[counter][0]=confirmed[0][i];
//cout << counter << "\t" << output[counter][0] << "\t" << confirmed [0][i] << endl;
}
}
for(int i=4;我想大概是计数器的最大大小。如果我没弄错的话,它会上升到36*40*72-1=103679
。如果已确认怎么办[0]
没有介于4
和40
元素之间的元素?我的计数器最多只能计数2592次,但您可以增加计数器的103680次
次数。@匿名…可能是因为当计数器达到2592次时,您就会得到segfault,而计数器正好是输出的大小
。
for(int i = 4; i<40; i++){
for(int k = 0; k<72; k++){
counter++;
output[counter][0]=confirmed[0][i];
//cout << counter << "\t" << output[counter][0] << "\t" << confirmed [0][i] << endl;
}
}