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