2013-10-21 120 views
1

我有一个非常简单的命令行工具在Xcode: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; 
} 

当我运行仪器 - >分配它显示了一个生活街区。 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; 
} 

现在,仪器 - >分配显示没有生命块。这似乎是正确的。

任何人都可以解释或重现我在第一个程序中看到的问题吗?

我正在使用Xcode 4.1.1

谢谢。

+1

*旁注:*总是使用最新的Xcode版本 – Raptor

+0

非常有趣的是,Xcode 5优化了alloc/free,所以没有分配块。但是我的大案例中的问题(太大了)仍然存在。我会尝试一些其他方法来显示问题。 –

回答

0

让我改述上面的评论。

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