#include <stdlib.h>
#include <stdio.h>
#define TEST
#include "listing4.h"
/* This function allocates a num_elem array of
pointers to arrays of integers. It then allocates
the arrays themselves*/
int **target(int num_elem, int elem_size)
{
int **master;
int index = 0;
/* allocate an array of pointers */
master = calloc(num_elem,sizeof(int *));
if(master != NULL)
{
/* allocate the arrays of ints */
do
{
master[index] = calloc(elem_size,sizeof(int));
if(master[index] == NULL)
{
/* cleanup code */
return NULL;
}
} while(index < num_elem);
return master;
}
else
return NULL;
}
/******** beginning of test code **********/
#if defined( TEST )
int testTarget( void )
{
int **master;
/* macro defined in Listing 3. This macro must
follow all local variable declarations and
precede any code statements. */
StartTest( "target()" );
/* specify failure on first allocation attempt */
SetCalloc( 0 );
if((master= target(10,10)) !: NULL)
ErrorMsg( 1, "Target failed out of memory test");
/* specify failure on second allocation */
SetCalloc( 1 );
if((master = target(10,10)) != NULL)
ErrorMsg( 2, "Target failed out of memory test" );
EndTest;
}
main()
{
if(testTarget() > 0)
printf("\a%d errors detected in target()\n");
}
#endif /* end of test code */
/* End of File */