PDA

Tam Sürümünü Görmek İçin : Dinamik dizi olusturma(2 boyutlu)


FoX_
14/04/2007, 17:00
Selam cevizciler;

Benim sorunum su sekilde:

Programa gerekli level no'yu girdikten sonra o level no'ya ait olan labirenti kullanicinin onune getiren ve o labirentten cikmasi icin yon tuslarini kullanan bir programim var.

Labirenti dosyadan okumak ve yon tuslarini kullanarak labirentte hareket etmesi icin 2 boyutlu dizi kullandim.

Ama programi ilk basta tek labirent icin hazirlamistim.Sonradan gelistirmeye karar verip baska labirentlerde koyayim dedim.Ama yeni yaptigim labirentin boyutu, ilk belirledigim boyutlarla uyusmadi.(Ilk olarak 12 x 12 yapmistim ama 2. labirent 15 x 12 oldu)

Simdi asil sorunum su:
Programda tanimladigim iki boyutlu diziyi, dosyadan okudugu labirentlere gore nasil bicimlendirmesini saglarim?
Yani benim tanimladigim dizi 12 x12 iken 13 x 14 luk bir labirente gore bu 12 x 12 dizinin boyutunu nasil degistirebilirim?

Dinamik bellek yonetimi basligi altinda bazi fonksiyonlar gordum ve soyle bir sey yapmaya calistim:

int CallMaze(FILE *fp,char array1[][12],int levelNo,int *spaceCoor3, int *spaceCoor4,int *satir, int *sutun)
{
int i,j,sayac = 0;
char str[15];


// Once satir sayisina gore hafizada yer ayiriyoruz.
// Eger gerekli miktar yoksa, uyari veriliyor.
array1 = realloc(array1, *satir * sizeof(char) );
if( array1 == NULL )
printf( "Yetersiz bellek!" );

// Daha sonra her satirda, sutun sayisi kadar hucrenin
// ayrilmasini sagliyoruz.
for( i = 0; i < *satir ; i++ ) {
array1[i] = realloc(array1, *sutun * sizeof(char) );
if( array1[i] == NULL )
printf( "Yetersiz bellek!" );
}


free(array1);

printf("Program durdu");
getch();
Verilen hata mesaji ise 1. ve 2. realloc fonksiyonlari icin sirasiyla soyle:


'=' : cannot convert from 'void *' to 'char [][12]'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast


'=' : cannot convert from 'void *' to 'char [12]'
There are no conversions to array types, although there are conversions to references or pointers to arrays

Edit: 2. realloc fonksiyonunun bulundugu yere array[i] yerine &array[i] yazdim, cunku dondurdugu adresi array[i]'nin adresine atamasi gerekiyor.(Benim mantigima gore)
Bu sefer 2 hata mesaji da ayni oldu.(1. realloc icin verilen mesaj)

Yardimlarinizi bekliyorum...
Tesekkurler...


FoX_
14/04/2007, 23:28
Farkettim ki iki boyutlu diziyi , labirentin satir ve sutun sayisini okuduktan sonra dinamik olarak olusturmak daha mantikli...:)(Onceden belli bir boyut ile olusturmak yerine)

Biraz daha arastirma yapiyim ben en iyisi.Olmazsa yazarim buraya....