我编写了以下 C 函数来拆分分隔符中的字符串并返回单词数字"num_words":
void split_string(char *string, char **result, char *delimiter, int num_words){
long unsigned int cont_len = strlen(string);
char line[cont_len];
strcpy(line, string);
int i = 0;
char *tmp;
char *p = strtok (line, delimiter);
while ((p != NULL) & (i <= num_words)){
if (i == num_words){
*result = strdup(p);
break;
}
p = strtok (NULL, delimiter);
i = i+1;
}
free(p);
}
主要:
char *string = "hello whole world";
char *result;
char *delimiter = " ";
int num_words = 2;
split_string(string, &result, delimiter, num_words);
在此示例中,split_string
将使结果等于"世界"。但是,当我尝试使用 gdb 进行调试时,我收到一个源自split_string
函数的free(p)
代码行的munmap_chunk(): invalid pointer
错误。
我知道strdup
分配内存,这就是我试图释放 p 指针的原因。我应该把它放在哪里?我应该只free(result)
主要吗?我已经阅读了有关类似堆栈溢出问题的答案,但没有一个可以解决我的问题......
在strtok 之后,您不需要释放内存。
如需进一步阅读:我需要释放 strtok 生成的字符串吗?