Ich muss frei() all den Speicher für meine Strukturkonfiguration zugewiesen.Ich kann nicht herausfinden, wie man meine Struktur frei
struct keysnvalues {
char* key;
char* value;
};
struct section {
char *name;
struct keysnvalues *keysnvalues;
int keysnvalues_ammount;
};
struct config {
struct section *sections;
int section_ammount;
};
Im beggining des Codes kann ich diese
struct section * sect = malloc(sizeof(struct section) * 255);
struct keysnvalues * keysnvalue = malloc(sizeof(struct keysnvalues) * 255);
Wenn ich Abschnitt hinzugefügt werden soll ich tun dies für die erste
sect[++num_section].name = buffer; // buffer is the name
Und für die nächsten Abschnitte
sect[num_section].keysnvalues = keysnvalue;
sect[num_section].keysnvalues_ammount = num_keysnvalues;
cfg -> section_ammount++;
//start with new keysnvalue
num_keysnvalues = 0;
keysnvalue = malloc(sizeof(struct keysnvalues) * 255);
sect[++num_section].name = buffer;
sect[num_section].keysnvalues = 0;
Wenn ich will einen Schlüssel und einen Wert Abschnitt füge ich mit ich dies tun
keysnvalue[num_keysnvalues].key = key;
keysnvalue[num_keysnvalues++].value = value;
Der gesamte Code ist hier arbeite: https://pastebin.com/pGztJ9k4
Ich bin der Tatsache bewusst, dass dies wahrscheinlich eine dumme Frage, aber ich konnte nicht herausfinden, wie man jetzt die ganze Strukturkonfiguration für Stunden freigibt.
Ich würde Ihre Hilfe wirklich schätzen.
'frei (keysnvalue);'? –
Ich vermute, es gibt eine Menge mehr als nur diesen Code. Etwas sagt mir 'Schlüssel'."Wert" und "Name" sind ebenfalls dynamisch, und das Management von * all * ist wesentlich stärker involviert als die hier dargestellte Trivialisierung. Ungeachtet dessen gibt die [Dokumentation für 'free()'] (http://en.cppreference.com/w/c/memory/free) gute Einsichten darüber, wie/wann sie zu verwenden ist. – WhozCraig
@WhozCraig Aber wenn ich malloc nicht auf Abschnitt [i] .name anrufe, sollte ich gerade frei (Abschnitt [i]) in Ordnung sein, oder? – Martin