【问题标题】:Getting 2d char array from function in c从c中的函数获取2d char数组
【发布时间】:2015-03-14 18:19:15
【问题描述】:

我想用空格分割我的 char 字符串,这是我的代码。(参考其他人)

void main() {
    char origin_str[] = "How are you";
    int n_segs = Words_counts(origin_str);
    char **split_array = malloc(n_segs * sizeof(char*));
    split_array = split_str_to_array(origin_str);
    ..... //do something
    free(split_array);
}

还有 split_str_to_array 函数:

char **split_str_to_array(const char strr[]) {
    char **res = NULL;
    char * p = strtok(strr, " ");
    int n_spaces = 0;

    while (p) {
        res = realloc(res, sizeof(char*) * ++n_spaces);
        if (res == NULL)
            exit(-1); 

        res[n_spaces - 1] = p;
        p = strtok(NULL, " ");
    }
    res = realloc(res, sizeof(char*) * (n_spaces + 1));
    res[n_spaces] = 0;
    return res;
}

效果很好,但我对从 split_str_to_array 函数获取字符数组的用法感到困惑。

我应该在 split 函数中使用 free(res) 吗?如果是,我如何返回 char 数组?声明一个已知长度的新节点返回?

我担心内存使用拆分功能出现问题。或者,有更好的方法来做同样的事情?

非常感谢您的帮助。

【问题讨论】:

    标签: c memory split heap-memory dynamic-memory-allocation


    【解决方案1】:

    free() 的用法是正确的。

    如果不再需要分配的内容,请将分配函数返回的内容传递给free(),释放分配的内容。

    但是main()中的分配没用

    char **split_array = malloc(n_segs * sizeof(char*));
    

    下一行

    split_array = split_str_to_array(origin_str);
    

    你覆盖了分配给split_array的内容。

    这样做会丢失 malloc() 返回的内容,因此无法再释放它,这会导致内存泄漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2021-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多