我在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的新手。