لماذا MIcroQuill Smartheap رمي "mem_bad_pointer" أخطاء بعد تضمين بيرل?

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

سؤال

أنا التضمين بيرل في تطبيق C++ يستخدم Smartheap.بغض النظر عما إذا كنت تقوم بتجميع بيرل إلى استخدام malloc أو النظام يمكنني الحصول على حفنة من الخطأ mem___سيئا_مؤشر الحوارات.يبدو أن تعمل بشكل جيد عندما كنت فقط انقر فوق "موافق" و تجاهل الأخطاء ، ولكن من الواضح أنني بحاجة فعلا حل المشكلة.

هل أنا ربما تحتاج إلى تجميع SmartHeap في بيرل بناء ؟ هو أنه حتى مجدية ؟

أدناه فقط الوثائق صفحة عن mem__سيئا_مؤشر يمكن أن تجد, ولكن أنا لا أقرب إلى حل المشكلة.أنا لا أفهم كيف أو من أين perl و Smartheap متضاربة مع بعضها البعض.أي مؤشرات تقدير.

  • المؤشر تم تخصيصها من قبل إدارة الذاكرة الأخرى من SmartHeap مثل من آخر DLL أو EXE أو من المترجم مكتبة وقت التشغيل.دراسة ملف map أن نرى أن SmartHeap نسخة من malloc ، _fmalloc/farmalloc ، أو المشغل الجديد ويتم ربط في.
  • المؤشر هو "البرية" (غير مهيأ), يتم تخصيص كومة (المتغير المحلي) ، أو غير صالحة.
  • المؤشر كان سابقا تحررت.إذا SmartHeap قد حررت الصفحة التي المؤشر أصلا المخصصة ، SmartHeap لن تكون قادرة على الكشف عن أنه مزدوج مجانا.ومع ذلك ، SmartHeap سوف التقرير صالحة المؤشر.استخدام dbgMemDeferFreeing للقبض على هذا النوع من الشوائب.
  • المؤشر كان زيادة أو إنقاصه منذ وقت التخصيص.
  • 16-bit x86 المؤشر كان يلقي إلى قرب المؤشر بعد تخصيص ، وفي هذه الحالة جزء جزء من المؤشر قد فقدت.
  • تجمع الذاكرة التي المؤشر خصص تم تحرير أو SmartHeap كانت غير مسجلة من المهمة.
  • المهمة التي المؤشر خصص تم إنهاء (انظر القسم باء-4).
هل كانت مفيدة؟

المحلول

دون رؤية رمز من الصعب تصحيح المشكلة.ربما كنت تخصيص الذاكرة باستخدام كل smartheap العادية إدارة الذاكرة.هذا يمكن أن يكون سبب عند allocat الذاكرة في dll بناء دون الذكية كومة.

اعتمادا على التعليمات البرمجية الخاصة بك ، وتخصيص يمكن أن يكون على ما يرام و قد تكون الكتابة خارج allcoated منطقة الذاكرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top