我有使用-O2編譯gcc(4.1.2)的C++代碼。使用GCC優化的C++代碼導致內核具有無效的free()字符串
當此代碼被編譯並且在沒有優化的情況下運行時,程序執行時沒有任何問題。
與O1/O2/O3一起編譯時,代碼會崩潰,並顯示valgrind指示無效空閒。 這已被縮小到函數內部的字符串變量。
代碼將在文件中讀取,並將迭代內容。 我已刪除了所有的處理代碼,和下面的代碼片段會導致核心...
int MyParser::iParseConfig(Config &inConfig)
{
bool keepGoing = true;
while(keepGoing)
{
string valueKey = "";
keepGoing = false;
}
return 0;
}
當此非優化的,它工作正常運行。 當我構建和運行這個優化,它不會工作。
它看起來是GCC優化字符串類的一個問題。
任何想法,我們可以繞過這個?
你是否檢查過所有'free()'或'delete'調用? – Synxis 2013-02-12 17:22:24
似乎對我很好。然而,缺少'else'子句似乎是可疑的。 – StoryTeller 2013-02-12 17:22:45
在墜機時''我的價值是多少?如果它超過99,你的'charIndex'數組會遇到緩衝區溢出問題。 – 2013-02-12 17:24:21