从c中的函数获取2d char数组

时间:2015-01-16 07:12:40

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

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

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函数获取char数组感到困惑。

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

我害怕内存使用分割功能中的问题。或者,更好的方法来做同样的事情?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

free()的使用是正确的。

通过传递给free()分配函数返回的内容,释放你不再需要的内容。

然而,main()中的分配是无用的

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

如下一行

split_array = split_str_to_array(origin_str);

你覆盖了被split_array指定的内容。

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