我想按空格分割我的字符串,这是我的代码。(引用其他人)
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数组?声明一个已知长度的新的返回?
我害怕内存使用分割功能中的问题。或者,更好的方法来做同样的事情?
非常感谢您的帮助。
答案 0 :(得分:1)
free()
的使用是正确的。
通过传递给free()
分配函数返回的内容,释放你不再需要的内容。
然而,main()
中的分配是无用的
char **split_array = malloc(n_segs * sizeof(char*));
如下一行
split_array = split_str_to_array(origin_str);
你覆盖了被split_array
指定的内容。
这样做会丢失malloc()
返回的内容,因此您无法再将其释放,这会导致内存泄漏。