PDA

View Full Version : سوال: در موردچگونگی تعریف حافظه ی پویا برای آرایه ی دو بعدی



kamran_14
سه شنبه 22 تیر 1389, 16:30 عصر
سلام
ببخشید

در c++ چطوری می شه یک آرایه ی دوبعد ی پویا درست کرد؟
این حافظه ی تخصیص داده شده را چطوری می شه حذف کرد؟

tdkhakpur
سه شنبه 22 تیر 1389, 19:38 عصر
روشهای زیادی وجود دارد


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;

Salar Ashgi
چهارشنبه 23 تیر 1389, 01:05 صبح
کاربر kamran_14 (http://barnamenevis.org/forum/member.php?u=133860) ، کاش یه جستجو قبل از ایجاد تاپیک میکردین .

بدلیل پست tdkhakpur (http://barnamenevis.org/forum/member.php?u=99732) ، تاپیک حذف نشد .

kamran_14
چهارشنبه 23 تیر 1389, 12:05 عصر
ببخشید


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;

tdkhakpur
چهارشنبه 23 تیر 1389, 12:13 عصر
آیا این هم درست است.


نه درست نیست خود اشاره گر هم به نوعی متغیره بوده که اندازه آن 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;