C 程序中的错误"munmap_chunk(): invalid pointer"



我编写了以下 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 生成的字符串吗?

最新更新