Защо MIcroQuill Smartheap хвърля грешки mem_bad_pointer, след като вградя perl?

Вграждам perl в C++ приложение, което използва Smartheap. Независимо дали компилирам perl да използва собствения си malloc или системния, получавам куп диалогови прозорци за грешка mem___bad_pointer. Изглежда, че работи добре, когато просто щракна върху „OK“ и игнорирам грешките, но очевидно трябва действително да разреша проблема.

Може би трябва да компилирам SmartHeap в моята компилация на perl? Това изобщо осъществимо ли е?

По-долу е единствената страница с документация за mem__bad_pointer, която успях да намеря, но не съм по-близо до решаването на проблема. Не разбирам как или къде perl и Smartheap са в конфликт помежду си. Всички насоки се оценяват.

  • Указателят е разпределен от мениджър на паметта, различен от SmartHeap, като например от друга DLL или EXE, или от библиотеката по време на изпълнение на компилатора. Проверете вашия файл с карта, за да видите дали версията SmartHeap на malloc, _fmalloc/farmalloc или оператор new е свързана.
  • Указателят е „див“ (неинициализиран), разпределен е в стека (локална променлива) или по друг начин е невалиден.
  • Показалецът беше предварително освободен. Ако SmartHeap е освободил страницата, от която първоначално е бил разпределен указателят, SmartHeap няма да може да открие, че това е двойно безплатно. SmartHeap обаче ще отчете невалидния указател. Използвайте dbgMemDeferFreeing, за да хванете този тип грешка.
  • Указателят е увеличен или намален от момента на разпределението.
  • За 16-битов x86 указателят е прехвърлен към близък указател след разпределението, в който случай сегментната част на указателя е загубена.
  • Пулът памет, от който е разпределен указателят, е бил освободен или SmartHeap е бил дерегистриран от задачата.
  • Задачата, от която е разпределен указателят, е прекратена (вижте раздел B.4).

person kingkongrevenge    schedule 30.01.2009    source източник


Отговори (1)


Без да видите кода, е трудно да се отстрани грешката. Може би разпределяте памет, като използвате както smartheap, така и обикновения мениджър на паметта. това може да бъде причинено, когато разпределите памет в dll компилация без интелигентна купчина.

В зависимост от вашия код, разпределението може да е наред и може да пишете извън зоната с allcoated памет.

person David    schedule 12.02.2009