我有一個字符串,我從ostringstream
得到。我目前正試圖在此字符串(content.replace(content.begin(), content.end(), "\n", "");
)來代替某些字符,但有時我得到一個異常:C++字符串替換字符串的任意長度
malloc: *** mach_vm_map(size=4294955008) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
std::bad_alloc
我懷疑,這是因爲該字符串是太大。這些情況的最佳做法是什麼?在堆上聲明字符串?
更新
我的完整的方法:
xml_node HTMLDocument::content() const {
xml_node html = this->doc.first_child();
xml_node body = html.child("body");
xml_node section = body.child("section");
std::ostringstream oss;
if (section.type() != xml_node_type::node_null) {
section.print(oss);
} else {
body.print(oss);
}
string content;
content = oss.str();
content.replace(content.begin(), content.end(), "<section />", "<section></section>");
content.replace(content.begin(), content.end(), "\t", "");
xml_node node;
return node;
}
如果你正在尋找的幫助與此特定問題,我想你會需要提供一個[最小的,可驗證的和完整的例子](http://stackoverflow.com/help/mcve) – Yann 2014-09-29 14:48:00
有一個很好的機會,錯誤與這段代碼無關。你有沒有試過用valgrind跑這個? – dasblinkenlight 2014-09-29 14:48:31
我無法在OSX上運行valgrind。 – ruipacheco 2014-09-29 14:51:22