我在 Visual Studio 2005(大型遗留项目)中使用 C++。
有以下代码片段:
bool FOO::bar(const string& input_text)
{
string::const_iterator
ch = input_text.begin(),
last_ch = input_text.end();
for( ; ch!=last_ch; ++ch )
{
/////////////////////////////////////////////////////
const char a = *ch;
/////////////////////////////////////////////////////
}
return true;
}
当我在调试模式下运行此代码时,它在线上崩溃const char a = *ch
并说:
foobar.exe 中 0x0000000140d08b20 处的未处理异常:0xC0000005:访问冲突读取位置 0x0000000000000000。
当我在发布模式下运行此代码时,它运行得很好。
这段代码调用如下:
CString full_filter;
full_filter.Format( "*%s*", filter_value );
foo.bar((LPCTSTR)full_filter));
我是 VS2005 C++ 新手,所以我现在正在查找这些是什么意思,但是由于评论部分的问题而将其放入。
我发现了一些看似相关的 C 问题和答案。基于这些,我尝试为 input_text 定义各种值,例如将其从参数中删除并将其定义为
string input_text("FOO");
或
string input_text = "FOO";
或
char[] tmp = "FOO"; string input_text = tmp;
都失败了。
我还采用了上面的代码片段并将其放入它自己品牌的新 VS2005 项目中,它运行得很好。
所以,在遗留的 VS2005 项目中有一些独特的设置会导致问题。任何线索这些设置可能是什么,或者如何将它们抽出来?我是 VS2005 级别的新手。