Я использую C ++ в Visual Studio 2005 (большой устаревший проект).
Есть следующий фрагмент кода:
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
строка и говорит:
Необработанное исключение в 0x0000000140d08b20 в файле foobar.exe: 0xC0000005: расположение чтения нарушения доступа 0x0000000000000000.
Когда я запускаю этот код в режиме выпуска, он работает нормально.
Этот код называется следующим образом:
CString full_filter;
full_filter.Format( "*%s*", filter_value );
foo.bar((LPCTSTR)full_filter));
Я новичок в VS2005 C ++, так что я сейчас выясняю, что это значит, но добавлю это из-за вопросов в разделе комментариев.
Я нашел ряд, казалось бы, связанных с С вопросов и ответов по этому поводу. Основываясь на них, я попытался определить различные значения для input_text, например удалить его из параметров и просто определить как
string input_text("FOO");
или же
string input_text = "FOO";
или же
char[] tmp = "FOO"; string input_text = tmp;
Все не удалось.
Я также взял приведенный выше фрагмент кода и поместил его в его собственный новый шлепающий проект VS2005, и он работает просто отлично.
Итак, в устаревшем проекте VS2005 есть несколько уникальных настроек, вызывающих проблемы. Любая подсказка, что эти настройки могут быть, или как выкурить их? Я звание VS2005 новичок.
Задача ещё не решена.
Других решений пока нет …