C++ 中malloc()和free()函數(shù)的理解
C++ 中malloc()和free()函數(shù)的理解
關于malloc和free這兩個函數(shù),malloc的用法示例:int *p=(int *)malloc(2*sizeof(int)); 它表示在堆中開辟一塊大小為2*sizeof(int)的一塊內存空間,p指向這塊內存空間的起始地址,malloc前面的(int*)表示這塊空間用來存儲int型數(shù)組。開辟了這塊空間后,可以修改這個空間中的值,例如為*p,*(p+1)做賦值操作,如果再次使用malloc函數(shù),例如再寫一個 int *q=(int *)malloc(2*sizeof(int)); 此時開辟的以q為起始地址長度為2*sizeof(int)的空間是不會覆蓋p所指向的空間的。但是,如果在int *q=(int *)malloc(2*sizeof(int));之前寫一個free(p),那么,q所指向的空間則有可能覆蓋p指向的空間。所謂的free(p)操作,其實是修改p所指向的空間的標記值,讓其可以被覆蓋。盡管執(zhí)行了free(p),p仍就指向以前的起始地址,依舊可以對*p,*(p+1)賦值,并且可訪問他們(例如輸出)。
代碼如下:
int main(){ int *p=(int *)malloc(2*sizeof(int)); free(p); *p=1; *(p+1)=2; cout<<p<<endl<<(p+1); cout<<endl; cout<<*p<<endl<<*(p+1); int *q=(int *)malloc(2*sizeof(int)); cout<<endl<<q<<endl<<(q+1); cout<<endl<<*q<<endl<<*(q+1); return 1; }
運行結果:
補充:
int *p=(int *)malloc(2*sizeof(int)); 若要釋放這段空間,必須free(p),只是單單想釋放部分空間,例如free(p+1)是不允許的。
以上就是C++ 中malloc()和free()函數(shù)的實例詳解,如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
c語言?數(shù)據(jù)存儲與原碼?反碼?補碼詳細解析
不知道你是否和我一樣好奇,學習編程語言的同時想,各個數(shù)據(jù)類型是怎樣在我們的內存中儲存的呢,如果你仔細深入了解的話,你會了解其中的樂趣,了解科學家們的偉大,了解c語言2022-02-02C++賦值函數(shù)+移動賦值函數(shù)+移動構造函數(shù)詳解
這篇文章主要介紹了C++賦值函數(shù)+移動賦值函數(shù)+移動構造函數(shù)詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08