c - malloc 时出现段错误

标签 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 中使用双指针而不是三重指针,它就可以正常工作。

最佳答案

你被运算符优先级/结合性所困扰 - 改变两个出现的地方:

*str_arr[i]

到:

(*str_arr)[i]

关于c - malloc 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22772953/

相关文章:

c - 打印数组的函数

c - 如何在 C 中使用 __builtin_assume_aligned

c - 字符数组中的十六进制

c - 为什么 while (*s++ != '\0' ) 不起作用?

c - 为什么递归函数的输出为0?

c - int 产生接近正确的答案,但 float 只给出 -18.000

c - 为什么在C程序中变量被突变?

c++ - 常量变量在 header 中不起作用

检查变量是否存在

c - 在不引用外部结构的情况下在嵌套结构中声明内部结构变量