...
somestruct * funcname(int xx=0,int yy=0) {
somestruct * mystruct = new somestruct;
cout << "\n(a new struct object created on the heap)\n"; // or is it on the stack??
mystruct->x=xx;
mystruct->y=yy;
return mystruct;
}
...
int main(int argc, char *argv[])
{
somestruct * mymainstruct = funcname(1,2);
cout << "\n(my main struct created)\n";
cout << mymainstruct->x;
cout << "\n";
cout << mymainstruct->y;
cout << "\n";
delete mymainstruct;
cout << "\n(my main struct destroyed)\n";
cout << "\n";
system("PAUSE");
return EXIT_SUCCESS;
}
(a new struct object created on the heap)
(my main struct created)
1
2
(my main struct destroyed)
في 08 تشرين الثاني 2011 11:27 ص، غمغم أحمد عبد العظيم باستغراب قائلاً:
, am I creating the new struct object on the heap, or on the stack ?بتاريخ 08 تشرين الثاني 2011 11:27 ص، قطب أحمد عبد العظيم حاجبيه بشدة وهو يقول:
do I need to 'delete' this newly created object, or is it automatically deleted?بتاريخ 12/ذو الحجة/1432 09:44 ص، قطب سلوان الهلالي حاجبيه بشدة وهو يقول:
مكان delete لا يسبب مشكلة هنا، ما هي رسالة الخطأ التي تحصل عليها بالضبط؟وفي 12/ذو الحجة/1432 09:44 ص، أعرب عبد اللطيف حاجي علي عن رأيه بالموقف كالآتي:
I think that you're confusing pointers with objects. Both mystruct inside funcname() and mymainstruct inside main() point to the same block in memory. So calling delete with any of them frees the allocated memoryAnd of course, you can't access the variable (or pointer) mystruct inside main(), since it has local scope.في 12/ذو الحجة/1432 09:44 ص، قال عبد اللطيف حاجي علي بهدوء وتؤدة:
Try to understand this, then ask yourself these questions:1. Where am I creating the structure? heap or stack?2. Where am I creating the pointer? heap or stack?وفي 08 تشرين الثاني 2011 12:01 م، أعرب أحمد عبد العظيم عن رأيه بالموقف كالآتي:
I see, so if I delete mynmainstruct i'm freeing the block of memory shared by both pointers , did I get that right?int a=5; // 1
int *p; // 2
new int; // 3
p = new int; // 4
int *q = new int; // 5
q = &a; // 6
The first line allocates an integer on the stackفي 12/ذو الحجة/1432 10:16 ص، عقد سلوان الهلالي حاجبيه بتفكير وقال:
من الابسط ان تعتبر المؤشرات كارقام فقط، عندما تعرّف struct mystruct فسيحتوي mystruct على هيكل بيانات (object)، لكن عندما تعرف struct * mystruct فإن mystruct هنا هو رقم يمثل مكان حفظ هيكل البيانات في الذاكرة (عنوان) وليس هيكل بيانات فعلي، لذلك يمكنك نقله والتعامل معه وكأنه بالضبط قيمة int.وفي 12/ذو الحجة/1432 10:15 ص، قال عبد اللطيف حاجي علي متحمساً:
I leave the fifth and sixth line for you.وفي 08 تشرين الثاني 2011 12:49 م، قال أحمد عبد العظيم متحمساً:
allocates a pointer 'q' on the stack which points to an integer on the heapmakes the pointer points to the address of variable 'a' which is allocated on the stackوفي 08 تشرين الثاني 2011 12:49 م، ظهر شبح ابتسامة على وجه أحمد عبد العظيم وهو يقول:
what happens to the memory allocated to the integer on the heap in the previous stepis this a memory leak?{
int a = 10;
int *p = new int;
{
int *o = new int;
int *q = new int;
*o = 8;
*q = 4;
*p = 5;
p = q;
}
{
*p = 1;
p = &a;
}
*p = 2;
}
*p = 6; //@
What do you think about that last line?