今天用gcc跑了个程序,往里面传了13.6M的数据,然后终端提示我“已放弃(核心已转储)”,请问这是什么原因呢?
这是那个说出错的函数:
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);
}
}
}