Ich schreibe eine Init-Funktion, um den ersten Knoten in einer verknüpften Liste zu initialisieren. Ich versuche einen String-Namen hinzuzufügen, um jeden Knoten zu beschriften, bekomme aber seltsames Verhalten, wenn die Funktion zurückkehrt. Ich übergebe die Zeichenfolge direkt in die Funktion, mallociere ein weiteres Zeichen * der gleichen Länge und streiche dann die Eingabezeichenfolge an diese neue Stelle. Ich versuche, es in einem Char ** innerhalb der Struktur zu speichern. Es wird in die Struktur kopiert, während es innerhalb der init-Funktion ist, aber sobald es zurückgegeben wird, ändert sich die Zeichenkette, was so aussieht, wie der Speicher beim Zurückgeben der Init-Funktion freigibt.Übergeben Zeichenfolge an Init-Funktion und Speichern in einer Malloc'd-Struktur
typedef struct {
key_grid_TypeDef* grid;
char** name;
uint8_t ID;
void* next;
void* prev;
} keymap_layer;
keymap_err_TypeDef keymap_init(keymap_list* layer_list,
key_grid_TypeDef* grid, char* layer_name){
//init initial layer
keymap_layer *layer = (keymap_layer*) malloc (sizeof(keymap_layer));
if (layer == NULL)
return km_init_err;
char* mal_name = (char*)
malloc((strlen(layer_name)+1)*sizeof(char));
if (mal_name == NULL)
return km_init_err;
strcpy(mal_name,layer_name);
layer->name = &mal_name;
if(sizeof(keymap0) == sizeof(*layer->grid))
memcpy(&layer->grid, &grid, KEYBOARD_ROWS * KEYBOARD_COLS);
else{
free(layer);
return km_init_err;
}
return km_ok;}
in meiner Aufgabe
ret = keymap_init(&key_layer_list, &keymap0, "Initial layer");
Dank
"Ich versuche, es in einem char ** innerhalb der Struktur zu speichern" - warum? – molbdnilo
Bitte formatieren Sie Ihr Code-Snippet richtig und stellen Sie alle nützlichen verwandten Definitionen bereit, bevor Sie –
@molbdnilo veröffentlichen, damit ich die Zeichenkette, auf die es in der Zukunft zeigt, leichter ändern kann. –