我第二次运行malloc时遇到分段错误:
#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并在keywords_init中使用双指针而不是三重指针,那么它就可以了。
答案 0 :(得分:4)
您被操作员优先级/关联性所困扰 - 更改两次出现:
*str_arr[i]
为:
(*str_arr)[i]