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