我有使用 gcc (4.1.2) 和 -O2 构建的 C++ 代码。
当此代码在没有优化的情况下编译和运行时,程序执行没有任何问题。
当使用 O1/O2/O3 编译时,代码将崩溃,并显示一个 valgrind 指示无效的空闲。这已缩小到函数内的字符串变量。
代码将读入一个文件,并迭代内容。我已经删除了所有处理代码,下面的代码片段导致核心...
int MyParser::iParseConfig(Config &inConfig)
{
bool keepGoing = true;
while(keepGoing)
{
string valueKey = "";
keepGoing = false;
}
return 0;
}
当它在未优化的情况下运行时,它工作正常。当我构建并运行此优化后,它将无法正常工作。
这似乎是 GCC 优化字符串类的方式的问题。
任何想法我们可以如何规避这个?