PDA

Tam Sürümünü Görmek İçin : C++ memory allocation (char **)


choldax
22/01/2008, 23:19
void PrintFrame(int h, int w)
{
char **frame;
int r,c,i;
frame = new char[h][w];
...

bana w harfini orada kullanamayacağımı söylüyor. sebebi nedir acaba?


acehreli
23/01/2008, 00:33
char a[h][w] dedigimiz zaman, h tane char[w] anlamina gelir. (Dogru yazdim, w tane char[h] degil!)

C++'ta degisken uzunluklu diziler olmadigi icin, o ifadenin char[w] kismindaki w'nun sabit olmasi gerekiyor.

Eger bunu kabul edersek, h tane char[w]'yu gostermek icin de char(*)[w] tUrune ihtiyac vardir. Yani orada frame'in tUrUnu de oyle yazarsak, bu calisir:


char (*frame)[3];
frame = new char[h][3];


O kodu daha okunur yapmak icin typedef cok ise yarar:


typedef char UcluDizi[3];
UcluDizi * frame;
frame = new UcluDizi[h];


Tabii orada 3'un sabit olarak yazilmasini istemedigin icin, aslinda soyle bir sey istiyorsun:


void PrintFrame(int h, int w)
{
char ** frame = new char* [h];

for (int i = 0; i != w; ++i) {
frame[i] = new char[w];
}
}


C++'ta bu islere cok daha uygun topluluk yapilari da var (ornegin vector). Onlardan uygun olanlarini kullanmak en dogrusu...

Ali

jit
23/01/2008, 02:22
char **x= new char* a[5];

bu güzelmiş bayağı ya. şimdi buna şöyle yaklaşabilir miyiz. bizim bir a dizimiz var. bu dizimizde de karakter pointerları mevcut. x pointerımız da bunların pointerı.

misal şöyle bir kodda

int *x=new int[5];

5 integerlık bir yer açıyor ve x pointerı da açılan yerdeki ilk elemanı gösteriyor başta. peki burdaki yer açılıp ilk elemanın adresini döndürme olayı yukarda nasıl oluyor.

yani burda new kavramını tam olarak anlayamadım. new char *a[5] dediğimizde de 5 character pointerı büyüklüğünde yer açılıp x pointerı orda açılan arraydeki ilk elemanın adresine mi sahip oluyor?

acehreli
23/01/2008, 02:45
Bunlari denemeden yaziyorsun degil mi... ;) Derlenebilmesi icin orada 'a' olmayacak:

char **x= new char* [5];

Bes tane char* icin yer ayriliyor ve birincisinin adresi dOnduruluyor. Ayrica, o bes tane char*'in degeri 0, yani hicbir nesneyi gostermiyorlar.

Ali

jit
23/01/2008, 02:55
tam düşündüğüm gibi sağolun hocam :)

evet ya orada a yı fazladan yazmışım. derlemek mi? o da ne? notepad coder :P

choldax
23/01/2008, 17:31
ilginiz için çok teşekkürler. buna benzer bir şeyi C'de matrix hesaplamalarında yapmıştım. İnsan çabuk unutuyor :)