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の初心者です。