C語言之內存空間


C語言可以用malloc關鍵字動態申請內存空間。數組在定義時就必須確定好空間的大小(固定值),動態申請可以由用戶自定義空間的大小。c中只要申請了空間就必須free()釋放掉,否則會造成內存泄露。

#include<stdio.h>
#include<windows.h>

int main() {
    int* p = NULL;
    int a = 0;
    scanf_s("%d",&a);//使用malloc動態申請內存,用戶可以自己定義申請多少個int,不造成空間浪費。數組則不行,數組在定義時必須確定好數組長度(空間大小)
    p=(int *)malloc(sizeof(int)*a);
    free(p);//釋放申請的空間(堆),否則會造成內存泄露

    system("pause");
    return 0;
}
動態申請堆內存空間

 c語言內存區域划分:

代碼區:存放代碼。

常量區:字符串。

棧區:局部變量。

堆區:malloc申請的地址。

全局數據區:全局變量和static局部變量。

動態申請內存空間之后一般都要初始化,以防申請的空間里面存在一些值運行時出現錯誤。

*memset()函數用來初始化內存,*memcpy()函數把內存數據復制到另一塊內存中。

內存釋放: free(p)函數不能釋放除了堆以外的內存空間,不能對一塊堆空間重復釋放2次。malloc與free配合使用。

C++中申請堆內存的是new關鍵字,釋放內存delete。

new語法:指針變量=new 數據類型;或者:指針變量=new 數據類型[長度 n];

示例:int *p=new int; 或者 :char *pStr=new char[50];

語法:delete 指針變量;或者:delete [] 指針變量;

示例:delete  p;或者:delete [] 指針變量;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM