On Sun, 06 Jul 2003 14:26:30 GMT, Al Bowers <xa*@abowers.co mbase.com>
wrote:
M-One wrote: > Question 6.16 discuss this topic.
> http://www.eskimo.com/~scs/C-faq/q6.16.html
[...]
#include <stdio.h>
#include <stdlib.h>
#define P printf
#define R return
#define F for
#define NROWS 256
#define NCOLUMNS 256
typedef struct ARRAY{
unsigned char **array1;
size_t nrows;
size_t ncolumns;
}ARRAY;
int resizeARRAY(ARR AY *p, size_t nrows, size_t ncolumns);
void freeARRAY(ARRAY *p);
int main(void)
{ ARRAY my={NULL, 0, 0};
if(resizeARRAY( &my, NROWS, NCOLUMNS))
{my.array1[255][255] = 'c';
printf("my.arra y1[255][555] = \'%c\'\n", my.array1[255][255]);
}
freeARRAY(&my);
return 0;
}
int resizeARRAY(ARR AY* p, size_t nrows, size_t ncolumns)
{ size_t i;
unsigned char **temp;
if( (temp=realloc( p->array1, nrows * sizeof(*temp) )) == NULL )
R 0;
p->array1=temp;
for( i=0; i<nrows; i++ )
{p->array1[i]=malloc( ncolumns * sizeof( *(p->array1[i]) ) );
if(p->array1[i] == NULL)
{F( --i; i!=0; --i)
free( p->array1[i] );
free( p->array1[0] );
free( p->array1 );
R 0;
}
}
p->nrows = nrows ;
p->ncolumns = ncolumns;
return i; /* Ritorna il numero di righe allocate; */
}
void freeARRAY(ARRAY * p)
{ size_t i;
for(i=0; i < p->nrows; i++)
free( p->array1[i] );
free( p->array1 );
p->array1 = 0;
p->ncolumns = 0;
p->nrows = 0;
}
void freeARRAY1(ARRA Y* p)
{ size_t i;
for(i=0; i < p->nrows; i++)
free( p->array1[i] );
free( p->array1 );
free(p);
}