[英]Getting 2d char array from function in c
我想按空格分割我的字符字符串,這是我的代碼。(參考其他人)
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數組? 聲明一個新的已知長度的返回?
我擔心內存會在split函數中使用問題。 還是更好的方法來做到這一點?
非常感謝您的幫助。
free()
的用法是正確的。
通過將由分配函數返回的內容傳遞給free()
, free()
不再需要的內容。
但是main()
的分配是沒有用的
char **split_array = malloc(n_segs * sizeof(char*));
如下一行
split_array = split_str_to_array(origin_str);
您將覆蓋已分配給split_array
。
這樣做會丟失malloc()
返回的內容,因此您將無法再釋放它,從而導致內存泄漏。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.