我正在編寫一個init函數來初始化鏈表中的第一個節點。我試圖添加一個字符串名稱來標記每個節點,但當函數返回時出現奇怪的行爲。我將字符串直接傳遞給函數,mallocing另一個相同長度的char *,然後將輸入字符串strcpy到這個新位置。我試圖將它存儲在結構中的char **中。它在init函數內複製到結構中,但一旦它返回字符串更改,就像內存在返回init函數時釋放一樣。將字符串傳遞給init函數並將其存儲在malloc'd struct
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;}
在我的任務
ret = keymap_init(&key_layer_list, &keymap0, "Initial layer");
感謝
「我試圖將它存儲在結構中的char **中 - 爲什麼? – molbdnilo
請正確格式化您的代碼片段,並在發佈 –
@molbdnilo之前提供所有有用的相關定義,以便我可以更輕鬆地更改它指向未來的字符串。 –