السلام عليكــم ورحمـة الله وبركاتــه ,
سأجرب كتابة ألغاز ايضا :lol:
- في الكود التالي خطأ منطقي ( أو بمعنى آخر , خطأ سيحصل أثناء وقت التشغيل , وفي حالة معيّنة وحيدة ( تقريبا) ) .. أي أنه لا يوجد خطأ في الصيغة syntax
المطلوب :
1- ماهو السطر الذي قد يسبب في تفجير هذا الخطأ أثناء التشغيل .. تحت ظرف معيّن .
2- ماهو العلاج الذي يزيل هذه المشكلة.
#include <iostream>
using namespace std;
class Object
{
public:
char *name;
Object (char *name)
{
if (name == NULL)
this->name = NULL;
else
{
this->name = new char[strlen(name) + 1];
strcpy (this->name, name);
}
}
~Object ()
{
if (name != NULL)
delete name;
}
Object & operator=(const Object & copy)
{
if(copy.name == NULL)
{
this->name = "NULL"; // or whatever (it does not matter)
return *this;
}
if (this->name != NULL)
{
delete this->name;
this->name = NULL;
}
this->name = new char[strlen (copy.name) + 1];
strcpy (this->name, copy.name);
return *this;
}
};
int main()
{
Object object_1("object 1");
Object object_2("object 2");
object_1 = object_2;
cout << " object_1 name: " << object_1.name << endl;
return 0;
}ارشاد :
- الكود السابق لا يوضّح الخطأ , ولايقوم بكشفه
- لكن بتغيير بسيط .. في الدالة main .. سينكشف الخطأ .. وهو خاص بالذاكرة ومشاكلها .. ماباقي الا أقول الحل .. :)
توضيح :
- هناك موضوع طويل .. يقف وراء هذا السؤال .. سأذكره بعد الحل ان شاء الله .



