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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c malloc 头文件_C语言提高篇_malloc,realloc和calloc的区别

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c malloc 头文件_C语言提高篇_malloc,realloc和calloc的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.malloc()
在內存的動態存儲區中分配一塊長度為size字節的連續區域,參數size為需要內存空間的長度,返回該區域的首地址。

其函數原型為void *malloc(unsigned int size);其作用是在內存的動態存儲區中分配一個長度為size的連續空間。此函數的返回值是分配區域的起始地址,或者說,此函數是一個指針型函數,返回的指針指向該分配域的開頭位置。

如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針一定要適當對齊,使其可以用于任何數據對象。

關于該函數的原型,在以前malloc返回的是char型指針,新的ANSIC標準規定,該函數返回為void型指針,因此必要時要進行類型轉換。它能向系統申請分配一個長度為num_bytes(或size)個字節的內存塊。

一般它需和free函數配對使用。free函數能釋放某個動態分配的地址,表明不再使用這塊動態分配的內存了,實現把之前動態申請的內存返還給系統。

2.calloc()
與malloc相似,參數sizeOfElement為申請地址的單位元素長度,numElements為元素個數,即在內存中申請numElements*sizeOfElement字節大小的連續地址空間.

void *calloc(size_t nmenb, size_t size);

calloc()函數為nmemb個元素的數組分配內存空間,其中,每個元素的長度都是size個字節。如果要求的空間無效,那么此函數返回指針。在分配了內存之后,calloc()函數會通過將所有位設置為0的方式進行初始化。比如,調用calloc()函數為n個整數的數組分配存儲空間,且保證所有整數初始化為0:

pi = calloc(n, sizeof(int));

因為calloc()函數會清空分配的內存,而malloc()函數不會,所以可以調用以“1”作為第一個實參的calloc()函數,為任何類型的數據項分配空間。比如:

struct point{ int x, y;} *pi;

pi = calloc(1, sizeof(struct point));

在執行此語句后,pi將指向一個結構體,且此結構體的成員x和y都會被設為0。

一般使用后要使用?free(起始地址的指針) 對內存進行釋放,不然內存申請過多會影響計算機的性能,以至于得重啟電腦。如果使用過后不清零,還可以使用該指針對該塊內存進行訪問。

頭文件:stdlib.h或malloc.h?

3. realloc()
給一個已經分配了地址的指針重新分配空間,參數ptr為原有的空間地址,newsize是重新申請的地址長度.
區別:
函數malloc不能初始化所分配的內存空間,而函數calloc能.如果由malloc()函數分配的內存空間原來沒有被使用過,則其中的每一位可能都是0;反之,?如果這部分內存曾經被分配過,則其中可能遺留有各種各樣的數據.也就是說,使用malloc()函數的程序開始時(內存空間還沒有被重新分配)能正常進行,但經過一段時間(內存空間還已經被重新分配)可能會出現問題.
函數calloc()?會將所分配的內存空間中的每一位都初始化為零,也就是說,如果你是為字符類型或整數類型的元素分配內存,那么這些元素將保證會被初始化為0;如果你是為指針類型的元素分配內存,那么這些元素通常會被初始化為空指針;如果你為實型數據分配內存,則這些元素會被初始化為浮點型的零.
函數malloc向系統申請分配指定size個字節的內存空間.返回類型是?void類型.void表示未確定類型的指針.C,C++規定,void*?類型可以強制轉換為任何其它類型的指針.
realloc可以對給定的指針所指的空間進行擴大或者縮小,無論是擴張或是縮小,原有內存的中內容將保持不變.當然,對于縮小,則被縮小的那一部分的內容會丟失**.realloc并不保證調整后的內存空間和原來的內存空間保持同一內存地址.相反,realloc返回的指針很可能指向一個新的地址.
realloc是從堆上分配內存的.當擴大一塊內存空間時,realloc()試圖直接從堆上現存的數據后面的那些字節中獲得附加的字節,如果數據后面的字節不夠,那么就使用堆上第一個有足夠大小的自由塊,現存的數據然后就被拷貝至新的位置,而老塊則放回到堆上.這句話傳遞的一個重要的信息就是數據可能被移動。

我們官方的QQ群1:281549832

我們官方的QQ群2:386393398

特別感謝網友的大力支持。

我們的開源團隊不斷擴大,希望大家快來一起加入我們吧。

在這里還是要謝謝大家的大力支持!

大家快來關注吧!

總結

以上是生活随笔為你收集整理的c malloc 头文件_C语言提高篇_malloc,realloc和calloc的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。