58127-1 C-ohjelmointi - Syksy 2000 : Kertausta: Luento4
#include<stdio.h> #include<stdlib.h> int main(void); #define Z_SIZE 5 #define X_SIZE 5 #define Y_SIZE 5 void vapauta(int ***); void tulosta(int ***); int main(void) { int ***Array3D; int x,y,z; /* Ensin varataan tilaa 3-ulotteisen taulukon viipaleille */ if(!( Array3D = (int ***)malloc(sizeof(int **) * Z_SIZE ))) { perror("Out of memory"); exit(1); } for(z = 0;z < Z_SIZE;z++) { /* Tässä varataan kullekkin viipaleen riville muistia */ if(!( Array3D[z] = (int **)malloc(sizeof(int *) * Y_SIZE))) { vapauta(Array3D); perror("Out of memory"); exit(1); } for ( y = 0; y < Y_SIZE;y++) { /* Lopulta kunkin viipaleen rivin alkiolle tilaa */ if(!( Array3D[z][y] = (int *)malloc(sizeof(int) * Y_SIZE))) { vapauta(Array3D); perror("Out of memory"); exit(1); } } } /* Nyt taulukko pitäisi olla valmis, kokeillaan */ for(z = 0;z < Z_SIZE;z++) { for(y = 0; y < Y_SIZE;y++) { for(x = 0;x < X_SIZE;x++) { Array3D[z][y][x] = z * 100 + y * 10 + x; } } } tulosta(Array3D); vapauta(Array3D); return 0; } void vapauta(int ***Array3D) { int y,z; /* Vapauta taulukko */ for(z = 0;z < Z_SIZE;z++) { for(y = 0; y < Y_SIZE;y++) { if (Array3D[z][y] != NULL) free(Array3D[z][y]); } if (Array3D[z] != NULL ) free(Array3D[z]); } if (Array3D) free(Array3D); } void tulosta(int ***Array3D) { int x,y,z; /* Tulostetaan taulukko näkyviin */ for(z = 0;z < Z_SIZE;z++) { printf("------------------------------------------------\n"); printf("Viipale %d\n",z); printf("Rivi Arvot\n"); for(y = 0; y < Y_SIZE;y++) { printf("%2d ",y); for(x = 0;x < X_SIZE;x++) { printf("%4d ",Array3D[z][y][x]); } printf("\n"); } } }
Jan Lindström (Jan.Lindstrom@cs.Helsinki.FI)