Почему я получаю ошибку переполнения буфера с этой строкой кода? - PullRequest
5 голосов
/ 24 декабря 2008

У меня есть только 1 строка кода, а это:

pcrecpp::RE re("abc");

внутри функции OnBnClickedButtonGo(). И эта функция не работает в режиме Release, но работает нормально в режиме отладки.

(я использую Visual Studio 8 в Windows XP.)

Сообщение об ошибке:

A buffer overrun has occurred in testregex.exe which has corrupted the program's
internal state. Press Break to debug the program or Continue to terminate
the program.
For more details please see Help topic 'How to debug Buffer Overrun Issues'.

Я подозреваю, что это его деструктор, который невидим и скрыт ... но на самом деле я не знаю.

PS: я статически связываюсь с PCRE lib версии 7.8. PS2: не очень актуально, но может помочь некоторым людям, которые испытывают затруднения при подключении к библиотеке PCRE (мне потребовались часы, чтобы разобраться с этим): включите строку #define PCRE_STATIC.

Ответы [ 3 ]

3 голосов
/ 27 января 2010

У меня было такое же сообщение об ошибке в моем случае. В отладке все нормально, но в релизе я получаю сообщение об ошибке. У меня есть собственная библиотека C / C ++, такая как native.dll. Я создал смешанную неуправляемую / управляемую библиотеку C ++, которая является оболочкой для этой библиотеки .net. Где-то в этом mixed.dll у меня есть объявление подписи неуправляемой функции, например:

typedef void ( *FunctionOnStartSend)();

для этого я получаю сообщение, но если я добавлю туда «волшебное слово», сообщение об ошибке не появится:

typedef void (__stdcall *FunctionOnStartSend)(); 
0 голосов
/ 07 октября 2010

Вот моя свежая история: Около месяца назад у меня произошел странный сбой соединения с VS2008, и в тот день я обнаружил, что настройка _SECURE_SCL = 0 может помочь (см. текст ссылки ). И это помогло. В тот день это помогло мне, и я просто распространил этот параметр на все библиотеки, которые мы создаем в команде - это потому, что MS говорит, что две библиотеки, созданные с разными _SECURE_SCL, несовместимы.

Время прошло, и три дня назад у меня появилась ошибка, когда VS2008 сообщает об ошибке, которую мы видим в первом посте. И нет никакой помощи от отладчика, потому что он заполняется только в Release build. Я потратил почти 2 дня, покачивая код библиотеки, и переполнение было ошибочным от строки к строке. Наконец я начал проверять настройки сборки построчно и вычислил разницу в этом параметре!

Почему, о, ребята из Microsoft не могут встроить небольшую проверку в код динамического загрузчика, чтобы проверить, что библиотека, которая в данный момент работает и будет динамически загружена, несовместима ?! Часть кода, которая экономит время людей. Мля!

0 голосов
/ 24 декабря 2008

Если это происходит только в режиме релиза, возможно, что-то «оптимизируется». Попробуйте сделать что-то большее, чем просто один вкладыш, например, Match () и, возможно, даже распечатать совпадения.

...