Почему MIcroQuill Smartheap выдает ошибки “mem_bad_pointer” после того, как я внедряю perl?
-
20-08-2019 - |
Вопрос
Я встраиваю perl в приложение на C ++, которое использует Умная Хватка.Независимо от того, компилирую ли я perl для использования его собственного malloc или системного, я получаю кучу диалоговых окон с ошибкой mem___bad_pointer.Кажется, это работает нормально, когда я просто нажимаю "ок" и игнорирую ошибки, но, очевидно, мне действительно нужно решить проблему.
Может быть, мне нужно скомпилировать SmartHeap в мою сборку perl?Возможно ли это вообще?
Ниже приведено единственная документация страницу о mem__bad_pointer я смог найти, но я не приблизился к решению проблемы.Я не понимаю, как и где perl и Smartheap конфликтуют друг с другом.Любые указания приветствуются.
- Указатель был выделен менеджером памяти, отличным от SmartHeap, например, из другой библиотеки DLL или EXE, или из библиотеки времени выполнения компилятора.Изучите свой файл карты, чтобы увидеть, что в него встроена версия malloc для SmartHeap, _fmalloc / farmalloc или operator new.
- Указатель является “диким” (неинициализированным), размещен в стеке (локальная переменная) или иным образом недопустим.
- Указатель был ранее освобожден.Если SmartHeap освободил страницу, с которой первоначально был выделен указатель, SmartHeap не сможет определить, что это двойное освобождение.Однако SmartHeap сообщит о недопустимом указателе.Используйте dbgMemDeferFreeing для обнаружения ошибок такого типа.
- Указатель был увеличен или уменьшен с момента выделения.
- Для 16-разрядной версии x86 указатель был приведен к ближайшему указателю после выделения, и в этом случае сегментная часть указателя была потеряна.
- Пул памяти, из которого был выделен указатель, был освобожден, или SmartHeap был незарегистрирован в задаче.
- Задача, из которой был выделен указатель, завершилась (см. Раздел B.4).
Решение
Не видя кода, трудно отладить проблему.Возможно, вы выделяете память как с помощью smartheap, так и с помощью обычного диспетчера памяти.это может быть вызвано, когда вы выделяете память в сборке dll без smart heap.
В зависимости от вашего кода, распределение может быть нормальным, и вы можете записывать за пределами выделенной области памяти.