freeing dynamic memory in the r.le programs

Darrell McCauley mccauley at
Sun Jul 18 19:39:24 EDT 1993

BAKERWL (BAKERWL at writes on 18 Jul 93:
>I have used the following code to allocate and free memory in one of the
>r.le programs:
>	pt = (int *)G_calloc(100, sizeof(int));

>	for (i=0; i<100; i++)
>	   free(pt[i]);
>	free(pt);
>is "int   *pt;" before the above code.  This problem was found by Lars

My understanding of C is that you only need one call to
free for every malloc call.  Therefore,
should be sufficient.

When higher dimension arrays are used, then you have to
call free more than once. For example, for an NxN array:

  int **pt;
  if ( (pt = (int **) malloc(N*sizeof(int *))) == NULL)
    fprintf(stderr,"opps\n"), exit(-1);
  for (i=0;i<N;++i)
    if ( (pt[i] = (int *) malloc(N*sizeof(int))) == NULL)
      fprintf(stderr,"opps\n"), exit(-1);


  for (i=0;i<N;++i)

see the FAQ for comp.lang.c (available via anonymous ftp

BTW, is there a nice way to run lint with the Gmakefile
setup? I currently do something like this:

CC = lint


More information about the grass-dev mailing list