日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

realloc函_realloc(重新分配内存空间的函数)

發(fā)布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 realloc函_realloc(重新分配内存空间的函数) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在頭文件中定義void * realloc(void * ptr,size_t new_size);

重新分配給定的內(nèi)存區(qū)域。它必須預(yù)先分配malloc(),calloc()或realloc()尚未釋放與free或呼叫realloc。否則,結(jié)果是不確定的。

重新分配由以下兩者之一完成:

a)ptr如有可能,擴大或縮小指定的現(xiàn)有地區(qū)。該地區(qū)的內(nèi)容保持不變,直至新舊尺寸中的較小者。如果區(qū)域展開,則數(shù)組新部分的內(nèi)容未定義。

b)分配一個大小為new_size字節(jié)的新內(nèi)存塊,復制大小等于新舊大小較小者的內(nèi)存區(qū)域,并釋放舊塊。

如果沒有足夠的內(nèi)存,則舊的內(nèi)存塊不會被釋放,并返回空指針。

如果ptr是NULL,則行為與調(diào)用malloc(new_size)相同。

如果new_size為零,則行為是實現(xiàn)定義的(可能會返回空指針(在這種情況下,可能會釋放或不釋放舊的內(nèi)存塊),或者可能會返回一些可能不用于訪問存儲的非空指針)。

realloc是線程安全的:它的行為就像訪問通過其參數(shù)可見的內(nèi)存位置,而不是任何靜態(tài)存儲。先前調(diào)用free或realloc來釋放內(nèi)存區(qū)域的同步 - 調(diào)用任何分配函數(shù),包括分配相同或部分同一區(qū)域內(nèi)存的realloc。在通過釋放函數(shù)訪問內(nèi)存之后以及在通過重新分配訪問內(nèi)存之前,會發(fā)生此同步。所有分配和解除分配功能在內(nèi)存的每個特定區(qū)域都有一個總的順序。(自C11以來)

參數(shù)

PTR-指向要重新分配的內(nèi)存區(qū)域的指針new_size-數(shù)組的新大小

返回值

成功時,將指針返回到新分配的內(nèi)存的開始位置。返回的指針必須用free()或來解除分配realloc()。原始指針ptr無效,并且對它的任何訪問都是未定義的行為(即使重新分配就地)。

失敗時,返回一個空指針。原始指針ptr仍然有效,可能需要使用free()or 取消分配realloc()。

注釋

從C11 DR 400開始不支持零大小。

最初(在C89中),增加了對零大小的支持以適應(yīng)如下代碼。

OBJ?*p?=?calloc(0,?sizeof(OBJ));?//?"zero-length"?placeholder...while(1)?{

p?=?realloc(p,?c?*?sizeof(OBJ));?//?reallocations?until?size?settles????...?//?code?that?may?change?c?or?break?out?of?loop}

#include?#include?

int?main(void){

int?*pa?=?malloc(10?*?sizeof?*pa);?//?allocate?an?array?of?10?int????if(pa)?{????????printf("%zu?bytes?allocated.?Storing?ints:?",?10*sizeof(int));????????for(int?n?=?0;?n?

int?*pb?=?realloc(pa,?1000000?*?sizeof?*pb);?//?reallocate?array?to?a?larger?size????if(pb)?{????????printf("\n%zu?bytes?allocated,?first?10?ints?are:?",?1000000*sizeof(int));????????for(int?n?=?0;?n?

輸出:

40?bytes?allocated.?Storing?ints:?0?1?2?3?4?5?6?7?8?94000000?bytes?allocated,?first?10?ints?are:?0?1?2?3?4?5?6?7?8?9

參考

C11標準(ISO / IEC 9899:2011):7.22.3.5 realloc函數(shù)(p:349)

C99標準(ISO / IEC 9899:1999):7.20.3.4 realloc函數(shù)(p:314)

C89 / C90標準(ISO / IEC 9899:1990):4.10.3.4 realloc函數(shù)

總結(jié)

以上是生活随笔為你收集整理的realloc函_realloc(重新分配内存空间的函数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。