No subject

Net.Noise owner news at max.cecer.army.mil
Mon Jul 19 17:18:29 EDT 1993


Newsgroups: info.grass.programmer
Path: zorro.cecer.army.mil!shapiro
From: shapiro at zorro.cecer.army.mil (Michael Shapiro)
Subject: Re: freeing dynamic memory in the r.le programs
Message-ID: <CAFKIr.7IK at news.cecer.army.mil>
Sender: news at news.cecer.army.mil (Net.Noise owner)
Organization: US Army Corps of Engineers Construction Engineering Research Labs
References: <5238311518071993_A00879_POSSE_117793CF1300*@mrgate.uwyo.edu>
Date: Mon, 19 Jul 1993 21:18:26 GMT
Lines: 42

In <5238311518071993_A00879_POSSE_117793CF1300*@mrgate.uwyo.edu> BAKERWL at corral.uwyo.edu (BAKERWL) writes:

>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);

>This works fine on Sun systems with a version of Unix System V, but
>produces the compiler message "incompatible integer/pointer combination"
>on Apollo machines with bsd4.3.  I forgot to mention that the declaration
>is "int   *pt;" before the above code.  This problem was found by Lars
>Schylberg.

    Based on the code segment, the for loop is the incorrect thing to do. You
    only allocated memory for pt, not pt[0] - pt[100] so you should only do
	free(pt)

    Your compiler is telling you something here. free(pt[i]) is calling
    free() with an int, not a pointer.

>Lars was able to fix the problem on the Apollo by replacing free(pt[i])
>with free(&pt[i]).  However, when I do this on my Sun I quickly run out
>of memory, indicating that the memory is not being freed correctly.

	This is definitely NOT the right thing to do.

>C books about this.  Anyone know a universal method for freeing memory
>that will work with System V and bsd?

	You are doing (almost) the right things here. SYSV and BSD
	use the same free() and malloc() interface.
-- 
Michael Shapiro               shapiro at zorro.cecer.army.mil
U.S. Army CERL                (217) 373-7277
P.O. Box 9005 
Champaign, Ill. 61826-9005



More information about the grass-dev mailing list