In order to pass any kind of data type to the functions, we shall pass the array to the functions using a void pointer. Also, for each allocation function, the size of an array's element must be passed.
The prototypes for the functions are:
/* * Abstract: * Allocates a 1D array * Parameters: * vector - a pointer to the 1D array * xsize - the size of the array * elementSize - the size of one element * Returns: * A pointer to the allocated array */ void* NAlloc1D(void* vector, size_t xsize, size_t elementSize); /* * Abstract: * Allocates a 2D array * Parameters: * vector - a pointer to the 2D array * xsize - the x size of the array (real of rows) * ysize - the y size of the array (real of columns) * elementSize - the size of one element * Returns: * A pointer to the allocated array */ void** NAlloc2D(void **vector, size_t xsize, size_t ysize, size_t elementSize); /* * Abstract: * Allocates a 3D array * Parameters: * vector - a pointer to the 3D array * xsize - the x size of the array (real of rows) * ysize - the y size of the array (real of columns) * zsize - the z size of the array (real of tables) * elementSize - the size of an array element * Returns: * A pointer to the allocated array */ void*** NAlloc3D(void ***vector, size_t xsize, size_t ysize, size_t zsize, size_t elementSize); /* * Abstract: * Allocates a 4D array * Parameters: * vector - a pointer to the 4D array * xsize - the x size of the array (real of rows) * ysize - the y size of the array (real of columns) * zsize - the z size of the array (real of tables) * tsize - the t size of the array * elementSize - the size of an array element * Returns: * NULL */ void**** NAlloc4D(void ****vector, size_t xsize, size_t ysize, size_t zsize, size_t tsize, size_t elementSize); /*Deallocation functions*/ /* * Abstract: * Deallocates a 1D array * Parameters: * vector - a pointer to the 1D array * Return: * NULL */ void* NFree1D(void *vector); /* * Abstract: * Deallocates a 2D array * Parameters: * vector - a pointer to the 2D array * xsize - the x size of the array (real of rows) * Returns: * NULL */ void** NFree2D(void **vector, size_t xSize); /* * Abstract: * Deallocates a 3D array * Parameters: * vector - a pointer to the 3D array * xsize - the x size of the array (real of rows) * ysize - the y size of the array (real of columns) * Returns: * NULL */ void*** NFree3D(void ***vector, size_t xsize, size_t ysize); /* * Abstract: * Deallocates a 4D array * Parameters: * vector - a pointer to the 3D array * xsize - the x size of the array (real of rows) * ysize - the y size of the array (real of columns) * zsize - the z size of the array (real of tables * Returns: * NULL */ void**** NFree4D(void ****vector, size_t xsize, size_t ysize, size_t zsize);
5.Example
#include<stdio.h> #include"dmda.h" int main() { int** array = NULL; int i,j; /*Creating a 10x10 2-dimensional numeric array*/ array = (int**)NAlloc2D((int**)array,10,10,sizeof(int)); /*Initializing the array with values*/ for(i=0; i<10; i++) { for(j=0; j<10; j++) { array[i][j] = i-j; } } /*Displaying the 2-dimensional array*/ for(i=0; i< 10; i++) { for(j=0; j<10; j++) { printf("%+d ",array[i][j]); } putchar('\n'); } /*Freeing the 2-dimensional array*/ array = (int**)NFree2D((int**)array,10); puts("Memory freed"); return 0; } /*Output +0 -1 -2 -3 -4 -5 -6 -7 -8 -9 +1 +0 -1 -2 -3 -4 -5 -6 -7 -8 +2 +1 +0 -1 -2 -3 -4 -5 -6 -7 +3 +2 +1 +0 -1 -2 -3 -4 -5 -6 +4 +3 +2 +1 +0 -1 -2 -3 -4 -5 +5 +4 +3 +2 +1 +0 -1 -2 -3 -4 +6 +5 +4 +3 +2 +1 +0 -1 -2 -3 +7 +6 +5 +4 +3 +2 +1 +0 -1 -2 +8 +7 +6 +5 +4 +3 +2 +1 +0 -1 +9 +8 +7 +6 +5 +4 +3 +2 +1 +0 Memory freed */
No comments:
Post a Comment
Got a question regarding something in the article? Leave me a comment and I will get back at you as soon as I can!