allocate_2D_mp_array - Allocates a 2D array of matrix pointers


#include "m/m_mat_vector.h"

Example compile flags (system dependent):
   -L/home/kobus/misc/load/linux_x86_64_opteron -L/usr/lib/x86_64-linux-gnu
  -lKJB                               -lfftw3  -lgsl -lgslcblas -ljpeg  -lSVM -lstdc++                    -lpthread -lSLATEC -lg2c    -lacml -lacml_mv -lblas -lg2c      -lncursesw 

Matrix ***allocate_2D_mp_array
	int num_rows,
	int num_cols


This routine returns a pointer P to a two-dimensional array of matrix pointers. P can be de-referenced by P[row][col] to obtain the storage of a Matrix*. P[0] points to a contiguous area of memory which contains the entire array. P[1] 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[0], or explicitly by row and column. (Note that this is not the common way of setting up a two-dimensional array--see below). This routine sets all the pointers to NULL. If TEST is #defined (unix only) then this routine is #define'd to be debug_allocate_2D_mp_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 for overuns. The routine free_2D_mp_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.


Naming convention--this routine is called "allocate_2D_mp_array" rather than "create_2D_mp_array" or "create_matrix_matrix" because we are not creating an abstract data type, but rather just allocating raw storage. For many puposes this routine is a hack waiting for a create_matrix_matrix routine to be written, but it has uses outside of this as well.


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: num_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.


Kobus Barnard


Kobus Barnard


get_target_matrix_vector , free_matrix_vector , count_non_null_matrix_vector_matrices , matrix_vectors_are_comparable , is_matrix_vector_consistent , average_matrices , std_dev_matrices , get_target_matrix_vector_vector , free_matrix_vector_vector , interleave_matrix_rows , interleave_matrix_cols , concat_matrices_vertically , concat_matrices_horizontally , get_matrix_from_matrix_vector , get_matrix_from_matrix_vector_with_col_selection , get_matrix_vector_from_matrix , get_matrix_vector_from_matrix_2 , free_2D_mp_array , free_2D_mp_array_and_matrices