2013-10-21 43 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()方法按預期運行。