Объявление жестко запрограммированного std :: string вызывает переполнение буфера

У меня есть следующая строка в моей программе, которая вызывает предупреждение во время выполнения:

if (!is_directory("C:\\NGFMS_Debug\\Files") && !create_directories("C:\\NGFMS_Debug\\Files"))

Текст предупреждения выглядит как итак: «Произошло переполнение буфера в XXX.exe, которое повредило внутреннее состояние программы».

Предупреждение приходит при вызове «is_directory (...)». Я предполагаю, что пространство для строки не выделяется, но я думал, что такой синтаксис был законным.

Функция is_directory является частью boost / filesystem.hpp, и я использую следующие пространства имен:

using namespace boost;
using namespace boost::filesystem;
using namespace std;

Это компилируется под VS2005 C ++. Есть идеи?

Обновление

Я попробовал несколько разных вещей и прошел через код, и вот что я нашел.

Если я это сделаю

char* path_chars_c;
path_chars_c = "C:\\Debug\\Files";
string path_str_c(path_chars_c);

Переменная path_chars_c содержит соответствующую строку, но переменная path_str_c после инициализации содержит мусор. Итак, похоже, что инициализация строки здесь нарушена. Кто-нибудь видел это?

7
задан Ian 13 February 2012 в 21:45
поделиться