باستخدام مجانا داخل المدمر كائن سراح مع حذف
-
06-07-2019 - |
سؤال
ولدي الكائن الذي أنا تحرير مع حذف، ولها char*
الذي يتم اطلاق سراح مع مجانا في destructor الخاص به. السبب أنا باستخدام الحرة لأنني كنت strdup وmalloc
في خلق مؤشرات char
. السبب أنا باستخدام malloc
هو لأنني كنت strdup لتبدأ في معظم المسارات التعليمات البرمجية. سيكون هذا الفساد السيناريو سبب الذاكرة؟
المحلول
لا، إذا كنت مباراة المكالمات بشكل صحيح أي free()
عن الذاكرة المخصصة مع malloc()
وdelete
عن الذاكرة المخصصة مع new
، وسوف تعمل بشكل جيد.
نصائح أخرى
ما تقومون به هو الصحيح. يجب أن يتم deallocated فئة التي تم new
ed مع delete
، ولكن إذا كان يملك ذاكرة التي تم تخصيصها مع malloc
(سواء بشكل مباشر أو غير مباشر) ثم فإنه ينبغي إلغاء تخصيص تلك الذاكرة مع free
.
وتنفيذ الخاص بك هو الصحيح. يمكنك استخدام مجانا () لتحرير الذاكرة المخصصة مع malloc () (أو strdup ()) وهذا هو بالضبط ما يجب القيام به.
والشرط هو أن تقوم بتحرير الذاكرة مع بدائية مطابقة تلك المستخدمة لتخصيص تلك الذاكرة. ويتحقق هذا الشرط في التطبيق الخاص بك.
وأنا أحسب ما هو الخطأ. أنا كان يمر الكائن بلدي كنسخة من خلال طريقة، وأنه أبقى char*
عبر. عندما خرجت من وظيفة، وحصلت على أنه كائن مؤقت حذف، تحرير char*
. الآن أنا في حاجة إلى char*
بعد أسلوب خرجت، ولكن هذا قد ذهب الآن. اثنين من *
وناقص واحد ثابتة.