Perché MicroQuill SmartHeap gettare errori “mem_bad_pointer” dopo l'ho incorporare perl?

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

Domanda

Io sono l'inclusione del Perl in un'applicazione C ++ che utilizza SmartHeap . Indipendentemente dal fatto che compilo il Perl di utilizzare il proprio malloc o il sistema di ricevo un sacco di finestre di dialogo errore mem___bad_pointer. Sembra funzionare bene quando ho basta cliccare su "ok" e ignorare gli errori, ma ovviamente ho bisogno di risolvere realmente il problema.

Ho forse bisogno di compilare SmartHeap nel mio perl costruire? È che anche fattibile?

Di seguito è l'unica pagina documentazione sulle mem__bad_pointer di che ho trovato, ma io non sono più vicino alla soluzione del problema. Non capisco come o dove perl e SmartHeap sono in conflitto tra loro. Tutti gli indicatori hanno apprezzato.

  • Il puntatore è stato allocato da un gestore di memoria diverso SmartHeap, ad esempio da un altro DLL o EXE, o dalla libreria compilatore runtime. Esaminare il file mappa per vedere che la versione SmartHeap di malloc, _fmalloc / farmalloc, o l'operatore di nuovo sta essendo legata a.
  • Il puntatore è “selvaggio” (inizializzato), è allocato sullo stack (variabile locale), o è comunque valido.
  • Il puntatore è stato precedentemente liberata. Se SmartHeap ha liberato la pagina da cui il puntatore è stato originariamente assegnata, SmartHeap non sarà in grado di rilevare che si tratta di un doppio libero. Tuttavia, SmartHeap segnalerà il puntatore non valido. Utilizzare dbgMemDeferFreeing per la cattura di questo tipo di bug.
  • Il puntatore è stato incrementato o decrementato dal tempo di assegnazione.
  • per 16-bit x86, il puntatore è stato lanciato ad un puntatore vicino dopo l'allocazione, nel qual caso la parte di segmento del puntatore è stato perso.
  • Il pool di memoria da cui il puntatore è stato allocato è stato liberato, o SmartHeap è stata annullata dal compito.
  • Il compito da cui il puntatore è stato assegnato terminato (vedere la sezione B.4).
È stato utile?

Soluzione

Senza vedere il codice è difficile eseguire il debug del problema. Forse si assegnano la memoria utilizzando sia SmartHeap e il gestore della memoria regolare. questo può essere causato quando allocat di memoria in una build di DLL senza intelligente mucchio.

A seconda del codice, l'assegnazione potrebbe andare bene e si può essere iscritto al di fuori dell'area di memoria allcoated.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top