سلام
ببخشید
در C++ چطوری می شه یک آرایه ی دوبعد ی پویا درست کرد؟
این حافظه ی تخصیص داده شده را چطوری می شه حذف کرد؟
سلام
ببخشید
در C++ چطوری می شه یک آرایه ی دوبعد ی پویا درست کرد؟
این حافظه ی تخصیص داده شده را چطوری می شه حذف کرد؟
روشهای زیادی وجود دارد
char **a;
// create
(char *) a = (char *) new long[20];
for( int i=0; i<20; i++)
(char *) a[i] = (char *) new long [1];
// delete
for( int i=0; i<20; i++)
delete [] a[i];
delete [] a;
ببخشید
char **a;
// create
(char *) a = (char *) new long[20];
for( int i=0; i<20; i++)
(char *) a[i] = (char *) new long [1];
// delete
for(i=0; i<20; i++)
delete [] a[i];
delete [] a;شما چرا به جای char از long استفاده کردید؟
آیا این هم درست است.
char **a;
// create
a = new char[20];
for( int i=0; i<20; i++)
a[i] = new char [1];
// delete
for(i=0; i<20; i++)
delete [] a[i];
delete [] a;
نه درست نیست خود اشاره گر هم به نوعی متغیره بوده که اندازه آن 4 بایت هست.آیا این هم درست است.
شما در فوق حافظه ای را برای ایندکس اول اشاره گر که باید محتوایش آدرس باشد رزرو کردید که مقدارش 20 بایت هست ولی از انجایی که اگر اشاره گر به یک خانه از حافظه اشاره کند احتیاج به 4 بایت دارد لذا باید برای هر اشاره گر حافظه 4 بایتی رزور شود نه 1 بایتی.
ولی کد شما میتواند با اصلاح زیر هم درست عمل کند.
char **a;
// create
a = new char[20*4]; // اصلاح
for( int i=0; i<20; i++)
a[i] = new char [1];
// delete
for(i=0; i<20; i++)
delete [] a[i];
delete [] a;