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指向的已經不是當時你給它的那塊空間了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章