0
考慮以下方法,從文本文件中讀取一行,並就標記化函數getline:替代標準::需要讀取文件
std::pair<int, int> METISParser::getHeader() {
// handle header line
int n; // number of nodes
int m; // number of edges
std::string line = "";
assert (this->graphFile);
if (std::getline(this->graphFile, line)) {
std::vector<node> tokens = parseLine(line);
n = tokens[0];
m = tokens[1];
return std::make_pair(n, m);
} else {
ERROR("getline not successful");
}
}
崩潰發生在std::getline
(pointer being freed was not allocated
- 不會進入這裏的細節)。 如果我在其他系統上編譯我的代碼,並且很可能不是我自己的代碼中的錯誤,則不會發生崩潰。目前我無法解決這個問題,我沒有時間,所以我只是試圖繞過它的幫助:
你可以建議一個不使用std::getline
的替代實現嗎?
編輯:我在Mac OS X 10.8與gcc-4.7.2。我在SuSE Linux 12.2上用gcc-4.7試過,在那裏崩潰沒有發生。
編輯:一個猜測是,parseLine
破壞字符串。下面是完整的代碼:
static std::vector<node> parseLine(std::string line) {
std::stringstream stream(line);
std::string token;
char delim = ' ';
std::vector<node> adjacencies;
// split string and push adjacent nodes
while (std::getline(stream, token, delim)) {
node v = atoi(token.c_str());
adjacencies.push_back(v);
}
return adjacencies;
}
是在'的std :: string'代碼免費的嗎?什麼是堆棧跟蹤? – sth
「其他系統」? - 目前你的目標系統是什麼?在什麼平臺上不工作? – Caribou
@sth是的。請參閱此處的堆棧跟蹤:https://gist.github.com/4603853 – clstaudt