c ++ странное сообщение об ошибке - PullRequest
0 голосов
/ 07 ноября 2011

Кто-то сообщил об ошибке в моей программе, которая выдает следующее сообщение об ошибке: enter image description here

Ошибка возникает в C ++ DLL программы, которая была скомпилирована VS2008.Я могу воспроизвести ошибку, но не могу выяснить, в чем проблема.Я уже выполнил кучу тестов на утечки памяти или неправильные выделения, но безуспешно.

Теперь странная вещь: когда я добавляю в код основную функцию, компилирую ее как EXE-файл и затем запускаюточно так же, все в порядке.Ошибка возникает только как DLL.Следующая странная вещь заключается в том, что когда я нажимаю «Игнорировать», программа продолжается и выполняет свою работу, как и ожидалось.

Итак, я ищу 2 типа ответов: - Ответы, которые помогают мне найти ошибку- Ответы, которые помогают мне «автоматически игнорировать» или скрывать это сообщение об ошибке, чтобы оно не происходило.Это было бы хорошо, так как нет разницы в результате.

Я благодарен за любую помощь или совет.

Спасибо!

Обновление

Как сказал Йоахим Пилеборг, я создал простой тестовый проект на c ++, который вызывает мою DLL, и он работает отлично!Программа, которая обычно вызывает DLL, написана на DELPHI, поэтому я думаю, что это может быть ошибкой DELPHI ... Странно: вызов DLL работает на 99,9999 ..%, но в одном конкретном случае возникает ошибка INдлл.Это не вызов, который терпит неудачу ... Действительно, действительно странная история: S

Ответы [ 3 ]

1 голос
/ 07 ноября 2011

4294967292 - это (unsigned)-4. Вы либо выполняете какое-то вычисление размера, который будет распределен неправильно, какое-то целое число переполнено, либо какое-то такое.

Я бы попытался установить точку останова на malloc (или любую другую функцию выделения) и проверить, откуда исходит плохое значение.

1 голос
/ 07 ноября 2011

Хорошо ... это отрицательное число.Более простая вещь ... возможно, ваш код выполняет malloc с недопустимым \ отрицательным размером?

Странно то, что это двоичное число 11111111111111111111111111111100, возможно, ваш размер вычислен неправильно.Однако это может быть более сложной ошибкой, например, из-за переполнения буфера.

Вы не должны вообще игнорировать эту ошибку, это может быть признаком более сложной и опасной ошибки.Попробуйте отладить ваше распределение, попробуйте получить именно тот фрагмент кода, который выполняет это недопустимое выделение.

Вы можете перегрузить новый оператор или переопределить malloc, заменив их своими функциями отладки, где вы можете проверить переданные аргументы (размер).

0 голосов
/ 11 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...