allocate_2D_byte_array - Allocates a 2D array of bytes
Example compile flags (system dependent):
-DLINUX_X86_64 -DLINUX_X86_64_OPTERON -DGNU_COMPILER
-lKJB -lfftw3 -lgsl -lgslcblas -ljpeg -lSVM -lstdc++ -lpthread -lSLATEC -lg2c -lacml -lacml_mv -lblas -lg2c -lncursesw
unsigned char **allocate_2D_byte_array
This routine returns a pointer P to a two-dimensional array of bytes. P can
be de-referenced by P[row][col] to obtain the storage of a unsigned char.
P points to a contiguous area of memory which contains the entire array.
P is a short-cut pointer to the first element of the second row, and so
on. Thus the array can be accessed sequentually starting at P, or
explicitly by row and column. (Note that this is not the common way of
setting up a two-dimensional array--see below).
If TEST is #defined (unix only) then this routine is #define'd to be
debug_allocate_2D_byte_array, which is the version available in the
development library. In development code, memory is tracked so that memory
leaks can be found more easily. Furthermore, all memory free'd is checked
that it was allocated by a KJB library routine. Finally, memory is checked
The routine free_2D_byte_array should be used to dispose of the storage once
it is no longer needed.
On error, this routine returns NULL, with an error message being set.
On success it returns a pointer to the array.
The structure of the returned array is somewhat different than a more
common form of a two-dimensional array in "C" where each row is allocated
separately. Here the storage area is contiguous. This allows for certain
operations to be done quickly, but note the following IMPORTANT point:
rows cannot be swapped by simply swapping row pointers!
This software is not adequatedly tested. It is recomended that
results are checked independantly where appropriate.