2009-01-30 37 views
1

我將Perl嵌入到使用Smartheap的C++應用程序中。無論我編譯perl使用它自己的malloc還是系統的,我都會得到一堆錯誤的mem___bad_pointer對話框。它似乎工作正常,當我只點擊「確定」,並忽略錯誤,但顯然我需要真正解決問題。爲什麼MIcroQuill Smartheap在嵌入perl後拋出「mem_bad_pointer」錯誤?

我可能需要編譯SmartHeap到我的Perl構建?這甚至可行嗎?

下面是the only documentation關於mem__bad_pointer的頁面我可以找到,但我沒有更接近解決問題。我不明白perl和Smartheap在彼此之間的衝突。任何指針讚賞。

  • 指針由SmartHeap以外的內存管理器(例如其他DLL或EXE)或編譯器運行時庫分配。檢查您的映射文件以查看是否連接了malloc,_fmalloc/farmalloc或operator new的SmartHeap版本。
  • 指針是「wild」(未初始化),分配在堆棧(本地變量)上,或者是否則無效。
  • 指針以前已釋放。如果SmartHeap釋放了指針最初分配的頁面,則SmartHeap將無法檢測到它是雙倍空閒的。但是,SmartHeap會報告無效指針。使用dbgMemDeferFreeing來捕獲這種類型的錯誤。
  • 指針從分配時開始遞增或遞減。
  • 對於16位x86,分配後指針被轉換爲近指針,在這種情況下,指針的段部分已丟失。
  • 指針分配的內存池已被釋放,或者SmartHeap已從任務中註銷。
  • 分配了指針的任務已終止(請參閱B.4節)。

回答

1

沒有看到代碼就很難調試問題。 也許你正在使用smartheap和普通內存管理器分配內存。這可能是由於您在沒有智能堆的dll構建中分配內存時造成的。

根據您的代碼,分配可能會很好,您可能會寫入全部內存區域之外。

相關問題