【问题标题】:I got a memory leak and the responsible frame is strdup. who can give me some clues?我有内存泄漏,负责的框架是 strdup。谁能给我一些线索?
【发布时间】:2012-05-30 07:40:20
【问题描述】:

当我使用仪器检测时出现内存泄漏。我对内存管理没有太多经验,所以我无法弄清楚这个问题的可能原因是什么,内存泄漏如下:

我想知道这种内存泄漏的可能原因。有哪位大神可以给点线索吗?

【问题讨论】:

    标签: iphone objective-c c memory-leaks


    【解决方案1】:

    strdup 在内部使用malloc,所以任何被strdup-ed 的东西都必须使用free 来释放。

    例如:

    char *duplicate = strdup("abcdef");
    ...
    free(duplicate);
    

    【讨论】:

    • 我已经搜索过我的项目,我从不明确使用 strdup
    【解决方案2】:

    strdup() 是一个库函数,因此您需要返回回溯,直到找到您的 代码中的调用者。在那里你会发现一个导致内存被分配的库调用——它应该在你的程序的其他地方有一个相应的释放调用。

    (释放函数不一定是直接调用free()——例如如果你调用getaddrinfo()库函数对应的释放函数是freeaddrinfo())。

    【讨论】:

    • 是的。但也许你应该说为什么?
    猜你喜欢
    • 2012-10-04
    • 2016-01-18
    • 2016-06-04
    • 2012-08-14
    • 2011-08-17
    • 2015-05-07
    • 2013-07-01
    • 2011-05-29
    • 1970-01-01
    相关资源
    最近更新 更多