السلام عليكــم ورحمـة الله وبركاتــه
من أعظم مميزات لغة الـ ++C هى المؤشرات Pointers ، و من ضمن إستخداماتها هى Dynamic Memory Allocating ، و تعنى تحديد الذاكرة المستخدمة للبرنامج أثناء وقت التشغيل Run-Time و ليس وقت كتابة البرنامج و ترجمته Compile-Time .
أثناء مراجعتى على لغة الـ ++C بعد فترة غياب طويـــــــــــلة من أحد المواقع و الكتب و .... ، و عند وصولى إلى فصل المؤشرات Pointers و Dynamic Memory Allocating ،، من ضمن الدراسة ، يوجد delete operator ، و هو المستخدم فى تحرير الذاكرة بعد إستخدامها .
كتبت هذا الكود :
#include <iostream>
using namespace std;
int main()
{
int* a;
int n;
cout << "Enter n: ";
cin >> n;
a = new int[n];
cout << "Enter num: ";
for (int i=0; i<n; i++)
{
cin >> a;
}
for (int i=0; i<n; i++)
{
cout << "(1) You Entered " << a << endl;;
}
delete [] a; //Here is the problem
cout << "-------------Here is the problem-------------" << endl;
for (int i=0; i<n; i++)
{
cout << "(2) You Entered " << a << endl;
}
system("pause");
return 0;
}ناتج البرنامج كان كالتالى :
Enter n: 3
Enter num: 12 54 6
(1) You Entered 12
(1) You Entered 54
(1) You Entered 6
-------------Here is the problem-------------
(2) You Entered 0
(2) You Entered 54
(2) You Entered 6
هل هذا صحيح :wacko: اليس من المفترض ألا أستطيع الوصول إلى محتويات ما يشير إليه المؤشر a ؟؟
المشكلة ظهرت عند أستخدام delete operator ، و وظيفته هى تحرير الذاكرة المستخدمة من قبل المؤشر ،، لكنه قام بتحرير الذاكرة الخاصة بأول عنصر فقط ، عنوانه هو نفس قيمة المؤشر .
اليست وظيفته هى تحرير الذاكرة المستخدمة كلها التى تساوى عنوان المؤشر + قيمة المتغير n ؟
هل ما افهمه هذا صحيح ام خطأ ؟؟
راجع هذا الرابط (يحتوى على نقاش مشابه للمشكلة) : هنا
وفقكم الله ،،



