PDA

Tam Sürümünü Görmek İçin : malloc() realloc () fonk.


PUNK
10/04/2005, 16:05
programımda w1 diye bir dizi var kullanıcı bişeyler yapıp cs değerini artırdıkça w1 için yer açıyorum
başlangıcta aşağıdaki kod işliyor
W1=(int*)malloc(4);

cs nin her artırımında kontroldeki belleği buyutuyorum
W1=(int*)realloc(W1,4*cs);
forumun başka bi yerinde anlatılanlara gore bu kotu bir tasarımmış
öyleyse iisi nasıl vede malloc realloc fonk. ile iki boyutlu dizi için nasıl yer ayrılıyor teşşekur ederim kolay gelsin herkese


ceeyt
10/04/2005, 16:18
Kotu tasarim olmasi kullanimla degil, realloc islevi ile ilgili. Sebep olarakta "cok fazla isi tek fonksiyona yaptirmak" gosteriliyor. Bununla ilgili sordugum bir sorudan bunu anladim.

iki boyutlu bir dizi icin yer ayirmak istiyorsan malloc veya calloc islevlerini satir sayisi kadar(her bir isaretci icin) cagirmalisin. Mesela 5 x 5 bir matris icin 5 defa 5 elemanlik yer ayirman gerekiyor. Birde **matris icin var onuda unutmayalim.

Bundan dolayi bu bellegi geri vermen gerektiginde tek tek tum isaretciler icin ayirdigin bellegi geri vermen gerekiyor. Daha sonra "matris" icin ayrilan alani geri vermelisin.

PUNK
10/04/2005, 16:30
W1=(float**)malloc(16); şeklinde başlangıc için yer ayırdım
for(int i=0;i<3;i++)
{
W1=(float**)realloc(W1,8*cs*3);
}
şeklinde yazdıımda adres hatası diyo tam olarak nasıl yapmalıyım

PUNK
10/04/2005, 16:33
for(int i=0;i<3;i++)
{
W1[i]=(float**)realloc(W1,8*cs*3);
} yaptıımda gene adres hatası veriyo :)

for(int i=0;i<3;i++)
{
W1[i]=(float**)realloc(W1[i],8*cs*3);
} yaptıımda gene hata :)

Euclides
11/04/2005, 15:02
PUNK
** demek 2 boyutlu dizi demek değildir
pointer'in pointer'i demektir. 1. pointer'in gösterdiği adresdeki değişkenin değeri 2.pointer olarak kabul edilecektir.

Test:
long **nTest_Var
nTest_Var=malloc(100*sizeof(long*));
for(int i=0;i<100;i++)
nTest_Var[i]=malloc(200*sizeof(long));