我将perl嵌入使用Smartheap的C++应用程序中。无论我将perl编译为使用其自己的malloc还是系统,无论如何我都会收到一堆错误的mem___bad_pointer对话框。当我单击“确定”并忽略错误时,似乎工作正常,但是显然我需要实际解决问题。

我可能需要将SmartHeap编译到我的perl构建中吗?那可行吗?

以下是我可以找到的有关mem__bad_pointer的the only documentation页面,但是我离解决该问题还很近。我不了解perl和Smartheap如何或在哪里发生冲突。任何指针表示赞赏。

  • 指针是由SmartHeap以外的内存管理器分配的,例如从另一个DLL或EXE,或从编译器运行时库分配的。检查您的映射文件,以查看是否已链接了malloc,_fmalloc / farmalloc或operator new的SmartHeap版本。
  • 指针为“野生”(未初始化),分配在堆栈上(局部变量)或无效。
  • 该指针先前已释放。如果SmartHeap释放了最初分配指针的页面,则SmartHeap将无法检测到它是两次释放。但是,SmartHeap将报告无效的指针。使用dbgMemDeferFreeing捕获此类错误。
  • 自分配以来,指针已递增或递减。
  • 对于16位x86,指针在分配后被强制转换为Near指针,在这种情况下,指针的段部分已丢失。
  • 分配了指针的内存池已释放,或者SmartHeap已从任务中注销。
  • 分配指针的任务已终止(请参阅第B.4节)。
  • 最佳答案

    没有看到代码,很难调试问题。
    也许您正在同时使用smartheap和常规内存管理器来分配内存。当您在没有智能堆的dll版本中分配内存时,可能会导致这种情况。

    根据您的代码,分配可能很好,并且您可能在全覆盖内存区域之外进行写入。

    09-30 23:51