Pourquoi MicroQuill SmartHeap jeter erreurs « MEM_BAD_POINTER » après que j'inclure du perl?

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

Question

Je suis dans une intégration de Perl application C ++ qui utilise SmartHeap . Peu importe si je compile le perl d'utiliser son propre malloc ou je reçois ce système un tas de boîtes de dialogue mem___bad_pointer d'erreur. Il semble fonctionner très bien quand je viens de cliquer sur « ok » et ignorer les erreurs, mais il est évident que je besoin de résoudre effectivement le problème.

Ai-je besoin peut-être de compiler SmartHeap dans mon perl construire? Est-ce même possible?

Ci-dessous la seule documentation page sur des années mem__bad_pointer je pouvais trouver, mais Je ne suis pas près de résoudre le problème. Je ne comprends pas comment ni où perl et SmartHeap sont en conflit les uns avec les autres. Tous les indicateurs ont apprécié.

  • Le pointeur a été attribué par un gestionnaire de mémoire autre que SmartHeap, comme d'une autre DLL ou EXE, ou de la bibliothèque d'exécution du compilateur. Examinez votre fichier carte pour voir que la version SmartHeap de malloc, _fmalloc / farmalloc, ou un opérateur nouveau est lié à.
  • Le pointeur est « sauvage » (non initialisé), est alloué sur la pile (variable locale), ou est autrement non valide.
  • Le pointeur a déjà été libéré. Si SmartHeap a libéré la page à partir de laquelle le pointeur a été initialement attribué, SmartHeap ne sera pas en mesure de détecter que c'est un double libre. Cependant, SmartHeap rapportera le pointeur non valide. Utilisez dbgMemDeferFreeing pour attraper ce type de bogue.
  • Le pointeur a été augmentée ou diminuée depuis le moment de l'attribution.
  • Pour x86 16 bits, le pointeur a été coulée en un pointeur près après répartition, auquel cas la partie de segment du pointeur a été perdue.
  • Le pool de mémoire à partir de laquelle le pointeur a été alloué a été libéré, ou SmartHeap a été désinscrit de la tâche.
  • La tâche à partir de laquelle le pointeur a été attribué a pris fin (voir la section B.4).
Était-ce utile?

La solution

Sans voir le code, il est difficile de déboguer le problème. Peut-être que vous allouez mémoire à l'aide à la fois SmartHeap et le gestionnaire de mémoire régulière. cela peut être causé lorsque vous affectat mémoire dans une version sans dll tas intelligent.

En fonction de votre code, l'allocation pourrait être bien et vous pouvez être écrit en dehors de la zone de mémoire allcoated.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top