今天用ubuntu的gcc跑程序,终端显示“已放弃,核心已转储”

今天用gcc跑了个程序,往里面传了13.6M的数据,然后终端提示我“已放弃(核心已转储)”,请问这是什么原因呢?

img

这是那个说出错的函数:

img

img

img

void GraphScheduler::retrieve_next_chunk() {

    //std::string delimiter = " ";
        std::string delimiter = "    ";
    string line;
    vector<string> tokens;

    EdgeUpdate next_edge;
    EdgeUpdateNoTime next_edge_no_time;

    int read = 0;

    while (read++ < CHUNK_SIZE && getline(file_stream_, line)) {
        tokens.clear();
        //cout <<" READING "<<line<< endl;
        size_t pos = 0;
        std::string token;
        while (pos != line.npos) {
            pos = line.find(delimiter);
            token = line.substr(0, pos);
            tokens.push_back(token);
            line.erase(0, pos + delimiter.length());
        }

        assert(tokens.size() >= 3 && tokens.size() <= 4);

        int start_rest_tokens = 0;
        if(tokens.size() == 4){ // plus/minus u v time
            if (tokens[0][0] == '+') {
                next_edge.is_add = true;
            } else if (tokens[0][0] == '-') {
                next_edge.is_add = false;
            } else {
                assert(false);
            }
            start_rest_tokens = 1;
        } else if (tokens.size() == 3){ // no sign assume +
            next_edge.is_add = true;
            start_rest_tokens = 0;
        } else {
            assert(false);
        }

        next_edge.node_u = atoi(tokens[start_rest_tokens].c_str());
        next_edge.node_v = atoi(tokens[start_rest_tokens+1].c_str());
        if (store_time_){
            next_edge.time = atoi(tokens[start_rest_tokens+2].c_str());
        }else{
            next_edge.time = 0;
        }
        assert(next_edge.node_u >= 0);
        assert(next_edge.node_v >= 0);
        assert(next_edge.time >= 0);
        //cerr <<"EDGE: "<<next_edge.node_u<< " " << next_edge.node_v<< " " << next_edge.time<< endl;


        if(next_edge.node_u == next_edge.node_v){
            //cerr <<"ERR: Loop"<<endl;
            continue;
        }

        if (store_time_){
            edge_queue_.push(next_edge);
        } else {
            next_edge_no_time.is_add = next_edge.is_add;
            next_edge_no_time.node_u = next_edge.node_u;
            next_edge_no_time.node_v = next_edge.node_v;
            edge_queue_no_time_.push(next_edge_no_time);
        }
    }
}