Вграждам 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).