Ich habe die struct
foo wie folgt erklärt:Wie können Heap-Objekte Daten vom Stack verwenden?
struct foo {
const char* name_lower;
const char* name_caps
//..
};
ich dynamisch Instanzen foo
auf dem Heap erstellen und einen Wert in der name_lower
und name_caps
Membervariable speichern möchten. Dies wird durch die Funktion getan bar
void bar(foo* entry, const char* str, int delimiter_pos) {
char l[2] = {str[caps_pos-1], '\0'}; // create new string
char c[2] = {str[caps_pos+1], '\0'};
entry->name_lower = &l[0]; // assign these strings the foo instance
entry->name_caps = &c[0];
}
Ich mache mir Sorgen, weil ich weiß nicht, ob dieser Code zum Absturz bringen wird. Die temporär erstellten Arrays l
und c
werden auf dem Stack gespeichert. Sobald die Funktion beendet ist, wird der Stapel gelöscht und c
und l
werden wahrscheinlich verschwinden.
Bedeutet dies, dass die foo
Instanz ihre Namen verliert, d. H. Ihre Referenzen? Wenn ja, wie kann ich dieses Problem lösen?
Google für "dynamische Speicherzuweisung" - http://www.programiz.com/c-programming/c-dynamic-memory-allocation –
Ich kenne die Prinzipien zur dynamischen Speicherzuweisung. Bedeutet das, dass ich l und c auf dem Haufen speichern muss, indem ich malloc anrufe? – null
Ja, genau. andernfalls werden sie auf die Adresse zeigen, die undefinierte Werte enthalten, nachdem der Ablauf von "bar" zurückkehrt. –