Hi,

when I define a structure, specialy those with pointers inside, I create a init function to set all members to zero or NULL. Then functions to allocate and deallocate memory for my structure can work well. In order to avoid confusion here is an example with matrices:

in matrix.h:

and in matrix.c:Code:typedef struct{ int row,col; double **mat; }Matrix;

and in the main source:Code:void initMatrix(Matrix *m){ m->row = m->col = 0; m->mat = NULL; } void freeMatrix(Matrix *m){ int i=0; for( i=0; i<m->row; i++ ) free(m->mat[i]) free(m->mat); initMatrix(m); //reset the state of the matrix } void allocMatrix(Matrix *m, int row, int col){ int i=0; freeMatrix(m); //protect against double allocation m->row = row; m->col = col; m->mat = (double **) malloc(sizeof(double *)*row); for( i=0; i<row; i++ ) m->mat[i] = (double *) malloc(sizeof(double)*col); }

my question here is: is there a way to avoid this fastidious initialization procedure and write code like the following?Code:void foo(){ Matrix A; init(&A); allocMatrix(&A,100,100); ... freeMatrix(&A); }

The reason is that it is annoying to initialize when there are many matrices. Moreover it would prevent errors if the developer forgets to call the initFunction.Code:typedef struct{ int row=0,col=0; double **mat=NULL; }Matrix; void foo(){ Matrix A; allocMatrix(&A,,100,100); ... freeMatrix(&A); }

best regards to those who read till there

Brice