【问题标题】:Why my program have errors with memory leak checking?为什么我的程序有内存泄漏检查错误?
【发布时间】:2010-12-28 05:02:18
【问题描述】:

当我使用它时

valgrind --leak-check=yes ./Main

我有大约 185236 个错误。它说:

x块中的xx字节可能丢失在xxxx的丢失记录xxxx中

这是我的代码:

Node InsertString(Head head, Node tree, char* data) {
    if (tree == NULL) {
        tree = malloc(sizeof (struct TreeNode)); //Error

        if (tree == NULL) {
            printf("Out of Space!\n");
        } else {
             tree->theData = malloc(sizeof (char) * strlen(data));//Error
            strcpy(tree->theData, data);
        }
    } else {
            if (strcmp(data, tree->theData) < 0) {
                tree->Left = InsertString(head, tree->Left, data); //Error
            } else {
                if (strcmp(data, tree->theData) > 0) {
                    tree->Right = InsertString(head, tree->Right, data);//Error
                }
            }
        } 

    }
    return tree;
}

谢谢!

【问题讨论】:

  • 你在哪里free 数据?
  • 你认为我应该在哪里释放数据?

标签: c memory-management memory-leaks valgrind


【解决方案1】:

您是否曾经调用free 来释放您使用malloc 分配的内存?

如果不是,那么,你就是在泄漏所有的内存。

【讨论】:

  • 您好,感谢您的回复,您能解释一下为什么我们必须 malloc 来获取内存空间来存储数据然后我们释放它吗?
  • @Tuan:你应该得到a good beginner C book。在此答案可用的有限空间中,我无法充分解释 C 内存模型和 C 中动态分配的最佳实践。
【解决方案2】:

使用名为 valgrind 的工具。它会告诉您此类内存泄漏。

【讨论】:

  • 你读过这个问题吗?问题中的第五个词是“valgrind”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2021-06-27
  • 2011-12-25
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
相关资源
最近更新 更多