7
想象這樣的代碼:Valgrind的未示出具有使用不當c_str()無效的內存訪問
string f()
{
string r = "ab";
return r;
}
int main() {
const char *c = f().c_str();
printf("%s.\n", c);
return 0;
}
該代碼可能會崩潰,是嗎?因爲c
指向的字符串被破壞。但是,通過Valgrind運行它不會顯示任何無效的內存訪問。爲什麼?我知道Valgrind無法檢查堆棧,但「ab」實際上位於堆上,對嗎?
小字符串優化。嘗試'「aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccc」' – StoryTeller
你是什麼意思「現在我的實際問題是以下」?請提出**新問題**。 –