السلام عليكم,,
بصراحة أنا مازلت جديد في موضوع ال C (و إن كانت لدي خلفية ضئيلة من أيام الكلية), و أكثر ما يجذبني هو في ال C هو الإمكانيات التي تجعلها تتعامل مع الذاكره بمرونه
المهم, لدي سؤال:
بقرائتي للموضوع التالي قرأت التالي (او كما يقول الكاتب)
عندما تقوم بإرجاع مؤشر من دالة, تأكد أن هذا المؤشر لا يشير على متغير محلى, و لكن لابأس إن تم عمل dynamic mem allocation له.
قمت بكتابة بيرمج صغير لإختبار هذه الخاصية, و عند التنفيذ وجدت أنه لا ضير من إرجاع مؤشر على متغير داخلي (لم يشتكى أحد)
#import <stdio.h>
typedef struct{
int id;
}emp;
emp* function();
int main(void){
emp* e = function();
printf("%i\n", e->id);
system("pause");
return 0;
}
emp* function(){
emp* ret;
//ret = malloc (sizeof *ret); // correct?
emp local; ret = &local; // error?
ret->id = 100;
return ret;
}أظن المشكله بهذا السطر:
emp local; ret = &local; // error?
و أنه يجب أن يستبدل بهذا السطر:
ret = malloc (sizeof *ret); // correct?
ولكن حال التنفذ تم التنفيذ بنجاح, هل هذا بسبب أن الذاكره لم يتم إسترجاعها بعد أم ماذا؟
نرجو الإفاده
ملاحظه, في حالة الجافا, فنحن لا نشغل بالنا بمثل هذا الكلام, حقيقة أعتقد لأنه لايوجد أصلا به إرجاع بال... (return by reference يعني :lol:)
فكل كائن يتم تخليقة داخل الدالة فهو يتم إنشاءه بطريقة Dynamic mem allocation (بإستخدام new )...
