حذف صفيف char الذي تم إرجاعه بواسطة getenv ()
سؤال
هل يجب أن أحرر الذاكرة المخصصة لمجموعة char ، التي يتم إرجاع المؤشر إليها من قبل char * getenv( char * )
وظيفة؟ وأي الطريق - ج free()
أو C+ delete []
؟ إذا لا - لماذا؟
أعني:
char * ptr = getenv( "LS_COLORS" );
cout << ptr << endl;
delete [] ptr; //Is this or free() call needed?
شكرًا لك.
المحلول
يتم تخزين البيانات الأصلية في environ
متغير (وهو مجموعة من char* ويحتوي على جميع متغيرات البيئة مع قيمها) ، getenv()
ابحث فقط عن الاسم المتغير المقابل ويعيد موضع قيمته من environ
متغير ، لذلك ليس عليك تحريره ، وإلا فقد يحدث سلوك غير محدد.
نصائح أخرى
يعيد Getenv مؤشرًا إلى بيئة العمليات الخاصة بك. لا يلزم أن يتم تعامله ، وربما يكون من الجيد عدم القيام بذلك. (ربما يكون الحذف والحر ذكيًا بما يكفي لعدم القيام بأي شيء ، ولكن إفساد بيئتك ليس فكرة جيدة.)
لا تنتمي إلى StackOverflow