0

我在 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并说:

foob​​ar.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 级别的新手。

4

0 回答 0