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)

