1. 程式人生 > >C語言記憶體管理機制的一點小問題

C語言記憶體管理機制的一點小問題

先來一張高能的圖: 這張圖片上的結果是一個細心地小夥兒發現的。。嗯不如說是個瘋狂的小夥兒。 第一行裡指標a,b竟然有相同的值,看這結果是不是很像引用? 理論上來說要用指標是要給它分配記憶體空間的,但是事實證明對這樣的小程式來說char的指標不分配貌似也能直接用?這一點很不解,隱約感覺這一點和圖片中顯示的問題有很大關聯。 記憶體分配方式有三種: 1、從靜態儲存區域中分配,如全域性變數、static變數,生存期為整個程式; 2、從棧上分配,如函式內部的區域性變數,函式執行完自動釋放; 3、從堆中分配,如用malloc或calloc分配的單元,由free釋放。 細分的話C編譯的程式佔用的記憶體分為好多塊,大概有棧區、堆區、全域性區、文字常量區、程式程式碼區。。
程式中的“abcde”是一個字串常量是吧,那就應是位於文字常量區(僅個人意見),執行a="abcde"相當於是給a重新賦值,讓它指向了“abcde”所在的地方,也就是說給a賦上了b的值;然後接下來再次給a賦值,它就指向了另一個字串常量,因此a的值改變。 再來一張高能的圖片:
a用malloc在堆中申請了一塊空間,但是給它指向了一個另外的地方,用free釋放a的時候就會出錯,因為a指向的已經不是當時你給它的那塊空間了。