¿Por qué tirar MicroQuill Smartheap errores “MEM_BAD_POINTER” después de lo integrar Perl?

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

Pregunta

Estoy incrustación de Perl en una aplicación de C ++ que utiliza Smartheap . Independientemente de si puedo compilar el Perl para utilizar su propio malloc o el sistema de recibo un montón de diálogos mem___bad_pointer error. Parece que funciona bien cuando haga clic en "OK" y omitir los errores, pero es evidente que hay que resolver realmente el problema.

¿Me puede que necesito para compilar SmartHeap en mi Perl construir? Es que incluso factible?

A continuación se muestra la única documentación página sobre mem__bad_pointer que pude encontrar, pero no soy más cerca de resolver el problema. No entiendo cómo o dónde Perl y Smartheap son contradictorios entre sí. Cualquier punteros apreciados.

  • El puntero fue asignado por un administrador de memoria que no sea SmartHeap, como de otro DLL o EXE, o de la biblioteca de tiempo de ejecución del compilador. Examine el archivo de mapa para ver que la versión SmartHeap de malloc, _fmalloc / farmalloc, o el operador de nuevo está siendo vinculado en.
  • El puntero es “salvaje” (sin inicializar), se asigna en la pila (variable local), o de lo contrario es válido.
  • El puntero fue liberado previamente. Si SmartHeap ha liberado a la página desde la que se asignó originalmente el puntero, SmartHeap no será capaz de detectar que se trata de una doble liberación. Sin embargo, SmartHeap reportará el puntero no válido. Utilice dbgMemDeferFreeing a atrapar a este tipo de fallo.
  • El puntero se incrementa o decrementa desde el momento de la asignación.
  • Para x86 de 16 bits, el puntero fue arrojado a un puntero cerca después de la asignación, en cuyo caso se ha perdido la parte del segmento del puntero.
  • El bloque de memoria desde la que se asignó el puntero ha sido liberado, o SmartHeap se ha cancelado el registro de la tarea.
  • La tarea de la que se asignó ha terminado el puntero (ver sección B.4).
¿Fue útil?

Solución

Sin ver el código es difícil de depurar el problema. Tal vez se están asignando memoria utilizando tanto SmartHeap y el gestor de memoria normales. esto puede ser causado cuando allocat memoria en una acumulación sin DLL montón inteligente.

En función de su código, la asignación podría estar bien y que se puede escribir fuera de la zona de memoria allcoated.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top