2012-01-31 64 views

回答

14

從手冊頁:

的realloc()的函數改變所述存儲器塊的大小ptr指向size字節。內容將從區域 的起點到新舊尺寸的最小值範圍內保持不變。如果新尺寸大於舊尺寸,則添加的內存不會被初始化。如果ptr爲NULL,那麼對於所有大小的值,調用等價於malloc(size)的 ;如果size等於零,並且ptr不爲NULL,那麼調用等價於free(ptr)。除非ptr爲NULL,否則之前調用malloc(),calloc()或realloc()時必須返回 。如果指向的區域被移動,則完成一個空閒(ptr)。

所以,你需要的大小調用realloc的()爲0

realloc(a, 0); 
+2

+1,這讓我想起了一個着名的線程與UD上glibc bugzilla http://sourceware.org/bugzilla/show_bug.cgi?id=12547 – ouah 2012-01-31 18:00:49

-1

alloca()來電,這是返回時釋放的堆棧幀分配內存。這個函數的行爲是不可移植的,手冊頁本身說不使用它。

+0

這並不真的回答他的問題,你提出了一種避免分配的方法,他想免費。 – 2012-01-31 17:47:36

+0

這是一個詭計的問題,不是嗎? 'alloca()'不會避免分配;它避免了堆。 – mkb 2012-01-31 19:30:21

相關問題