不可以的。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了梁園免費建站歡迎大家使用!
malloc, alloc, free是c定義的一組內(nèi)存管理的API函數(shù),當(dāng)你調(diào)用malloc、alloc分配內(nèi)存時,不僅僅是從堆里面分配得到了可用內(nèi)存,實際上內(nèi)存管理子系統(tǒng)還會維護了內(nèi)存列表。你自己定義的指針不會在這個列表中的,所以free會出問題的。
那么,使用new, GlobalAlloc之類的方式分配的內(nèi)存可不可以使用free呢。我的回答是,盡量不要,大部分情況都會帶來風(fēng)險。這里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函數(shù)的區(qū)別。
關(guān)于使用分配的內(nèi)存,調(diào)用free后的內(nèi)存狀態(tài)解釋如下:
1.當(dāng)調(diào)用free來釋放分配的內(nèi)存時,它表明該內(nèi)存可以被其他人使用,也就是說,它可以在其他地方調(diào)用malloc之后分配給內(nèi)存
2.對于釋放后內(nèi)存中的數(shù)據(jù)數(shù)量,我們只能認為是臟數(shù)據(jù);換句話說,這部分數(shù)據(jù)可能存在并保持原始值,也可能被清空或修改為其他值;
這表明有許多可能的情況下,因此,內(nèi)存被釋放后,除了分配指針賦值的空,也要小心不要參考這部分的內(nèi)存,不要試圖得到這部分的價值,這些已經(jīng)是非法的。
擴展資料:
在程序中使用自由釋放,否則內(nèi)存將不會被釋放。
C將不會被釋放。所謂的動態(tài)內(nèi)存是malloc系列函數(shù)所請求的內(nèi)存,只有在程序中使用free時才會釋放。
標(biāo)準(zhǔn)庫中malloc函數(shù)的實現(xiàn)原理。要理解malloc的內(nèi)存存儲結(jié)構(gòu),與全局變量不同,malloc不在編譯器編譯時分配內(nèi)存空間,而只在調(diào)用malloc函數(shù)時才分配內(nèi)存空間。有時我在中間調(diào)用free函數(shù)來釋放空間。
這個問題有意思,查了下資料,在申請內(nèi)存塊時會在內(nèi)存塊前面幾個字節(jié)存儲內(nèi)存塊的大小。所以free()函數(shù)只要把首地址往前推就可以讀取內(nèi)存塊的大小了。
free函數(shù)的用法釋放ptr指向的存儲空間。被釋放的空間通常被送入可用存儲區(qū)池,以后可在調(diào)用malloc、realloc以及calloc函數(shù)來再分配。
free?不管指針指向多大的空間,均可以正確地進行釋放,這一點釋放比?delete/delete []?要方便。如在分配指針時,用的是new或new[]。
在釋放內(nèi)存時,并不能圖方便而使用free來釋放。反過來,用malloc?分配的內(nèi)存,也不能用delete/delete[]來釋放。
舉例:
int* p = (int *) malloc(4);
*p = 100;
free(p); //釋放?p?所指的內(nèi)存空間
或者:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個整數(shù)的內(nèi)存空間。
……
free(p);
擴展資料
1、free是和malloc、realloc或者calloc函數(shù)成對出現(xiàn)的,來保證動態(tài)分配的空間及時釋放。
2、一塊動態(tài)申請的內(nèi)存用free釋放一次就夠。
如果不適用free釋放內(nèi)存,會造成內(nèi)存泄露。隨著程序的運行,程序所占內(nèi)存越來越多,知道系統(tǒng)奔潰或者程序結(jié)束。
1、free函數(shù):
原型:void free(void *ptr);
功能:釋放malloc(或calloc、realloc)函數(shù)給指針變量分配的動態(tài)內(nèi)存;
頭文件:malloc.h或stdlib.h;
2、為了避免釋放已經(jīng)釋放了內(nèi)存的指針內(nèi)存,或沒有釋放內(nèi)存,在C語言中最好是在定義指針時賦初值NULL,釋放后立即賦NULL,釋放時檢查指針值再決定釋放就避免釋放錯誤了,例如:
int *a = NULL
int *b = (int*) malloc(sizeof(int) * 10);
a= b;
/* 執(zhí)行大量操作后 */
if(a != NULL) {free(a);a=NULL;}
if(b != NULL) {free(b);b=NULL;}
網(wǎng)頁標(biāo)題:c語言free函數(shù)空間 在c語言中free函數(shù)什么意思?
新聞來源:http://muchs.cn/article22/hgcpcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、動態(tài)網(wǎng)站、App設(shè)計、外貿(mào)建站、商城網(wǎng)站、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)