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