سؤال

ما هي بعض الأسباب العامة الذاكرة تسرب خطأ تجزئة نوع من الأخطاء ؟

هل كانت مفيدة؟

المحلول

Segfaults:

  • استخدام التعلق المؤشرات:لا إعادة تعيين مؤشرات بعد deallocation
  • لا التحقق من مؤشر قبل الاستخدام
  • لا تهيئة المتغيرات/أعضاء

الذاكرة/الموارد التسريبات:

  • متناسين أن الإفراج الموارد (مجانا الذاكرة بإغلاق الملف،...)
  • في بيئات مع جامع القمامة:خلق حلقة من الرجوع الكائنات

كيفية الكشف عن/تجنب:

  • التعلق المؤشرات:ترميز القاعدة بدقة تعيين مؤشرات بعد deallocation
  • استخدام رمز ثابت مدقق من أجل تجنب معظم segfaults
  • استخدام رمز الحيوي محلل للتحقق من الموارد التسريبات بعيدا

نصائح أخرى

تسرب الذاكرة:عموما هذا يشير إلى لغة مثل C حيث تدير الذاكرة يدويا.في هذه الحالة سوف يتم تخصيص الذاكرة دون تخليصه عند الانتهاء من استخدامه.المخصصات تتراكم أثناء تشغيل التطبيق و الذاكرة لا يمكن أن يتحرر حتى انتهاء عملية منفذة. تسرب الذاكرة (ويكيبيديا)

تجزئة أخطاء:السبب الأكثر شيوعا لهذا النوع من الخطأ هو محاولة الوصول إلى جزء من الذاكرة إما غير موجود أو هو خارج المسموح به الذاكرة الخاصة بك تشغيل البرنامج (على سبيل المثال إذا حاولت الوصول إلى ذاكرة نظام التشغيل يتم تحميلها في).عادة هذا يعني أنك تحاول استخدام سيء المؤشر ، لذلك على سبيل المثال:

int* ptr;
...
...
...
*ptr = 5;

من شأنه أن يسبب segfault لأن ptr هو مؤشر فارغة (أو القمامة) و لديك لم يتم تخصيص الذاكرة المؤشر إلى نقطة. تجزئة خطأ (ويكيبيديا)

الكثير ، بما في ذلك:

  • بتخصيص جزء من الذاكرة ومن ثم استخدام أكثر من خصص له ،
  • تخصيص الذاكرة وليس تحرير ،
  • لا initialising المؤشرات والبيانات بشكل صحيح ،
  • لا initialising funciton المؤشرات بشكل صحيح ،
  • استدعاء وظائف غير صحيحة أرقام أو قيم المعلمات ،
  • محاولة قراءة أو كتابة من خلال NULL المؤشرات ،
  • ربط بشكل غير صحيح إلى المكتبات أو غير صحيحة المكتبات.

ليس كل من هذه تنطبق على جميع اللغات ، ولكن هذه هي بعض من الأشياء المفيدة للبدء في التفكير.

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

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