[英]Freeing memory allocated for string in C
我遇到了内存分配问题并解决了问题。
我正在尝试使用压缩trie(Patricia)实现字典。 我有一个trie库,当我从main调用它的函数时它可以正常工作。 但是,当我尝试解析输入时,我有一点问题。
我有一个解析器库,它从标准输入中读取一个单词,并从trie库中调用insert
函数。 它这样称呼它:
void tryInsert(char *commandLine, struct tree *t) {
char *arg[3] = { NULL };
sscanf(commandLine, "%ms %ms%ms", &arg[0], &arg[1], &arg[2]);
if (arg[1] == 0 || arg[2] != 0 || !consistsOfSmallCases(arg[1]))
printf("ignored\n");
else
//inserting arg[1] into tree
insert(t, arg[1]);
// free(arg[0]);
// free(arg[1]);
// free(arg[2]);
}
“免费”功能的三个调用现在标记为表示,因为:
insert
函数有两个参数:trie和char *word
。 在这个函数中,我将一个word
的后缀插入到一个新的trie中。 这意味着我不想立即释放为字符串分配的内存。
但是,由于我只插入后缀 ,因此我无法控制前缀。
这意味着如果在一个清除trie的clear
函数内部,我调用free(node->content)
,我实际上并没有释放所有分配的内存。
而且,当尝试将字符串word
复制到insert
函数内的char word1[256]
并取消注释那些你释放时,一切都停止工作。
我很感激任何想法如何处理,
您的代码中存在一些逻辑错误,在处理动态内存时总是很可怕。
insert()
函数需要复制它希望存储的字符串部分,因为它只需要一个前缀。
此外,在依赖具有有效值的变量之前,您确实应该检查sscanf()
成功。 如果它没有返回3
,则存在解析问题,并且不会分配所有字符串。 检查返回值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.