在malloc&ing期间获得分段错误

时间:2014-03-31 21:53:24

标签: c

我第二次运行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中使用双指针而不是三重指针,那么它就可以了。

1 个答案:

答案 0 :(得分:4)

您被操作员优先级/关联性所困扰 - 更改两次出现:

*str_arr[i]

为:

(*str_arr)[i]