Почему MIcroQuill Smartheap выдает ошибки “mem_bad_pointer” после того, как я внедряю perl?

StackOverflow https://stackoverflow.com/questions/494530

Вопрос

Я встраиваю 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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top