سؤال

وز أيها ++ قراصنة الكمبيوتر، ولدي السؤال التالي.

وعندما يتم الكتابة فوق بعض البيانات من كائن باستخدام برنامج الخاطئ، لماذا البرنامج تفشل في نهاية المطاف على تدمير هذا الكائن مع خالية من الأخطاء المزدوجة؟ كيف أعرف إذا كان تلف البيانات أو لا؟ ولماذا انها لا تسبب ضعف مجانا؟

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

المحلول

وانها عادة لا أن الذاكرة الكائن والكتابة، ولكن بعض جزء من الذاكرة خارج الكائن. إذا كان هذا يضرب هياكل المراقبة malloc، والإرادة الحرة يفزع بمجرد أن يصل إليهم ويحاول أن تفعل أشياء غريبة يستند إلى بنية تالف.

إذا كنت حقا فقط الكتابة ذاكرة الكائن مع الأشياء سخيفة، وليس هناك طريقة malloc / الحرة من شأنه أن نعرف. قد يتعطل البرنامج، ولكن لأسباب أخرى.

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

وفيما يتعلق C ++: <م> دائما تأكد من أن استخدام الجديد بالتزامن مع حذف و، على التوالي، جديدة [] بالاشتراك مع حذف []. لا نخلط بينها. الأشياء السيئة سوف يحدث، في كثير من الأحيان على غرار ما كنت تصف (ولكن valgrind يحذرك).

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