Date: Sun, 21 Sep 2008 21:50:09 +0200 From: Mel <fbsd.questions@rachie.is-a-geek.net> To: freebsd-questions@freebsd.org, trashy_bumper@yahoo.com Subject: Re: Segmentation fault when free Message-ID: <200809212150.09315.fbsd.questions@rachie.is-a-geek.net> In-Reply-To: <266527.92897.qm@web110502.mail.gq1.yahoo.com> References: <266527.92897.qm@web110502.mail.gq1.yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sunday 21 September 2008 14:57:06 Nash Nipples wrote: > > > can someone please explain to me what happens to the > > > > allocated memory > > > > > called within a function assigned to its local pointer > > > > after this function > > > > > ends > > > > Ok - let's see if I get this right: > > - the allocated memory > > - called within a function > > - assigned to a local pointer > > > > Any malloc'ed memory is application global accessible. > > Assigning a pointer to > > a variable doesn't allocate memory (the compiler and > > runtime libraries > > already setup storage for the variable, at declaration > > time). So, I have no > > idea what you mean with the "called within a > > function" part. > > > > -- > > Mel > > thanks for making it even more clear to me. > actually what i meant was this: > > void function(void){ > char *p; > p = malloc(1); > } > int main(void){ > while (1){ > function(); > /* in the end of this function function() > * the memory is still allocated > * even when the only pointer who knows its address > * does not longer exist > * which is why we have to free() the memory > * during the application runtime > * to avoid it from growing to ridiculous size > */ > } > } Right, this is one of the annoyances of C-programming "Who still knows where my pointer is". You can use a general rule though: If I don't return this pointer, and I don't assign this pointer to a parameter, and I don't assign this pointer to a global variable, I should free this pointer myself. (Yes yes, malloc'd static storage - new can of worms). -- Mel Problem with today's modular software: they start with the modules and never get to the software part.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200809212150.09315.fbsd.questions>