0
我得到一個分割故障第二次的malloc運行:獲取分段錯誤而malloc'ing
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int keywords_init(char *str, char ***str_arr);
int main(void) {
char str[] = "keyword1,keyword2,keyword3";
char **str_arr = NULL;
int arr_elements;
arr_elements = keywords_init(str, &str_arr);
return 0;
}
int keywords_init(char *str, char ***str_arr) {
int i;
char *pch;
/* String break */
pch = strtok(str, ",");
for (i = 0; pch != NULL; i++) {
*str_arr = realloc (*str_arr, (i+1)*sizeof(char *));
*str_arr[i] = malloc (strlen(pch) + 1);
strcpy(*str_arr[i], pch);
printf("%d: %s\n", i, pch);
pch = strtok (NULL, ",");
}
return i;
}
什麼讓我困惑的是,如果我沒有通過str_arr的地址keywords_init並使用雙指針而不是關鍵字_init中的三元組,它工作得很好。
我覺得用三指針的指示輕微設計缺陷 –
你可以通過返回指針數組並通過指針傳遞計數來避免三星編程。未來的維護者會真的愛你。而... *提示*:避免strtok()它是邪惡的,它很糟糕。 – wildplasser
目前他正在返回兩件事:「雙指針」和int。你似乎正在建議返回'char **'並且使用參數'int *',而不是返回'int'和參數'char ***'。原則上我不明白爲什麼應該避免後者。 –