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