繁体   English   中英

释放为C中的字符串分配的内存

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM