1

我在 Xcode 中有一个非常简单的命令行工具:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main(int argc, const char * argv[])
{
    void *p = calloc(32, 1);
    assert(p);
    free(p);
    return 0;
}

当我运行 Instruments->Allocations 时,它会显示一个活块。free似乎被忽略了。

在过去,我记得你实际上仍然可以使用最后一个被释放的块。所以我尝试了这个:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main(int argc, const char * argv[])
{
    void *p = calloc(32, 1);
    assert(p);
    free(p);
    void *q = calloc(32, 1);
    assert(q);
    free(q);
    return 0;
}

现在, Instruments->Allocations 显示没有活块。这似乎是正确的。

谁能解释或重现我在第一个程序中看到的问题?

我正在使用 Xcode 4.1.1

谢谢。

4

1 回答 1

0

让我重新表述一下上面的评论。

Xcode 5 中的Apple LLVM解决了分配/释放行为,因此现在没有分配块,因此该free()方法按预期运行。

于 2013-10-22T00:12:55.517 回答