سؤال

ولدي الكائن الذي أنا تحرير مع حذف، ولها char* الذي يتم اطلاق سراح مع مجانا في destructor الخاص به. السبب أنا باستخدام الحرة لأنني كنت strdup وmalloc في خلق مؤشرات char. السبب أنا باستخدام malloc هو لأنني كنت strdup لتبدأ في معظم المسارات التعليمات البرمجية. سيكون هذا الفساد السيناريو سبب الذاكرة؟

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

المحلول

لا، إذا كنت مباراة المكالمات بشكل صحيح أي free() عن الذاكرة المخصصة مع malloc() وdelete عن الذاكرة المخصصة مع new، وسوف تعمل بشكل جيد.

نصائح أخرى

ما تقومون به هو الصحيح. يجب أن يتم deallocated فئة التي تم newed مع delete، ولكن إذا كان يملك ذاكرة التي تم تخصيصها مع malloc (سواء بشكل مباشر أو غير مباشر) ثم فإنه ينبغي إلغاء تخصيص تلك الذاكرة مع free.

وتنفيذ الخاص بك هو الصحيح. يمكنك استخدام مجانا () لتحرير الذاكرة المخصصة مع malloc () (أو strdup ()) وهذا هو بالضبط ما يجب القيام به.

والشرط هو أن تقوم بتحرير الذاكرة مع بدائية مطابقة تلك المستخدمة لتخصيص تلك الذاكرة. ويتحقق هذا الشرط في التطبيق الخاص بك.

وأنا أحسب ما هو الخطأ. أنا كان يمر الكائن بلدي كنسخة من خلال طريقة، وأنه أبقى char* عبر. عندما خرجت من وظيفة، وحصلت على أنه كائن مؤقت حذف، تحرير char*. الآن أنا في حاجة إلى char* بعد أسلوب خرجت، ولكن هذا قد ذهب الآن. اثنين من * وناقص واحد ثابتة.

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