erlug
[Top] [All Lists]

Re: [Erlug] Problema con free in C.

To: erlug@xxxxxxxxxxxxxx
Subject: Re: [Erlug] Problema con free in C.
From: "Ivan Sergio Borgonovo" <mail@xxxxxxxxxxxxxxx>
Date: Mon, 18 Mar 2002 11:29:25 +0100
On 18 Mar 2002 at 10:43, Alessandro Ronchi wrote:

> Perchè questo pezzo di codice:
>
> {
>         char *systring;
>         systring = (char *) malloc (500);
>         strcat (systring,  "chown administrator ");
>         free (systring);
>         systring = (char *) malloc (500);
>         strcat(systring,"ciao");
>         printf("%s\n", systring);
> }
>
> Mi ritorna
> "chown administrator ciao"
> Invece di "ciao" e basta?
> Come devo fare per liberare veramente la memoria allocata per la stringa, per
> poterla riutilizzare?

Azzardo...

dato per certo che free NON vuol dire "puliscimi la memoria" ma solo
rendila disponibile per altro...

nello stesso posto dove tu stai concatenando "ciao" prima c'era chown
administrator " [*]

strcat cerca \0 e lo trova proprio a fine "chown administrator " e li
ci incolla "ciao"

ora per pura sfiga, credo che anche la prima operazione
strcat (systring,  "chown administrator ");
potrebbe non andare a buon fine, poichè nulla sai sul contenuto dei 500
bites successivi al puntatore che se contenessero qualche \0 ....

Per avere una risposta sicura guardati semplicemente il codice sorgente
di strcat

[*] questo NON è scontato... visto che il gestore di memoria potrebbe
decidere di assegnarti un indirizzo all'altro capo dell'universo al
secondo malloc


--
Salve
Ivan Sergio Borgonovo
http://www.webthatworks.it/
uniq life || sleep 24h



<Prev in Thread] Current Thread [Next in Thread>