C [vs2005] calloc in Fkt. wo free

darthplaya

Grünschnabel
Also ich hab da ein Problem (was auch sonst ;-) )

Ich allokiere in einer Funktion Speicher für ein char-array.
Mit Hilfe der Funktion erzeuge ich einen Randomstring.

Funktionsprototyp:
char *RandomString(unsigned int length);

Die Allokation sieht wie folgt aus:
char *String;
String= (char*)calloc(length+1, sizeof(char));

Die Funktion returned String, welche in der main s1 und s2 zugewiesen wird.

Jetzt mein Problem:

Ich hab keine Ahnung wo und wie ich free!
(Gar keine außer der Syntax free(xy);)

Danke schon mal im voraus!
 
Moin,
anbei ein kleines Beispiel aus der VS-Hilfe (!) :eek:
/* CALLOC.C: This program uses calloc to allocate space for
* 40 long integers. It initializes each element to zero.
*/
#include <stdio.h>
#include <malloc.h>

void main( void )
{
long *buffer;

buffer = (long *)calloc( 40, sizeof( long ) );
if( buffer != NULL )
printf( "Allocated 40 long integers\n" );
else
printf( "Can't allocate memory\n" );
free( buffer );
}

Output:
Allocated 40 long integers

Wo es in Deinem Code genau sein muss Gute Frage, ohne den Code genau ist eine solche Aussage schwierig!
Es sollte auf jeden Fall im gleichen Kontext wie das "calloc", sprich auf der gleichen logischen Ebene (Klammerung, Funktion oder was auch immer)!

Poste mal den Code (bitte mit Code-Tags)!

Gruß
Klaus
 
Hi.
Also ich hab da ein Problem (was auch sonst ;-) )

Ich allokiere in einer Funktion Speicher für ein char-array.
Mit Hilfe der Funktion erzeuge ich einen Randomstring.

Funktionsprototyp:
char *RandomString(unsigned int length);

Die Allokation sieht wie folgt aus:
char *String;
String= (char*)calloc(length+1, sizeof(char));

Die Funktion returned String, welche in der main s1 und s2 zugewiesen wird.

Jetzt mein Problem:

Ich hab keine Ahnung wo und wie ich free!
Wenn du den String nicht mehr benötigst, dann rufst du free() auf. Das darfst du natürlich nur entweder für s1 oder s2 machen.

Diese Vorgehensweise ist allerdings auch etwas unüblich. Du solltest den Speicher vorher allozieren und der Funktion übergeben, die dann den String verändert. So kannst du auch ein statisches Array verwenden.

Gruß
 
hi

hab leider meinen Quellcode gestern ausversehen gelöscht
an vfl_freak:

ja das leuchtet mir ein den allokierten speicher auf der selben ebene zu freen in der er allokiert wird nur
hab ich ja mit der funktion einen random string erzeugt, den speicher (wegen wählbarer länge) allokiert und diesen string in der main einem pointer vom typ char übergeben
(dh. in der funktion steht: return string und in der main s1= RandomString(laenge1);
und s2=RandomString(laenge2);)
ich kann den allokierten Speicher also nicht in der Funktion freigeben weil ich nach dem Funktionsaufruf noch mit ihm arbeiten möchte

in der main (am ende) bin ich alle mir sinnvollen möglichkeiten durchgegangen
{
free(string); //name in Fkt --> sehr wahrscheinlich komplett falsch
free(s1); free(s2); //namen in main
free(s1*);free(s2*);
.....
}

aber der Compiler hat jedesmal gemeckert

leider kann ich code nicht mehr posten aber vl. schreib ich ihn heute noch mal

würde mich freuen wenn das nicht nötig wär.
aber vielen dank schon mal
 
Zuletzt bearbeitet:
Hi.

Bitte achte auf die Netiquette, insbesondere Punkt 15. Danke.

Bitte poste Codeschnipsel immer in Code-Tags (der # Button im Editor).

C:
char *s1 = RandomString(5);
char *s2 = s1;

...
free(s1); // ODER: free(s2);
Gruß
 
Zurück