您的位置:首页 > 编程语言 > C语言/C++

C语言内存管理机制的一点小问题

2014-12-17 16:53 211 查看
先来一张高能的图:



这张图片上的结果是一个细心地小伙儿发现的。。嗯不如说是个疯狂的小伙儿。
第一行里指针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指向的已经不是当时你给它的那块空间了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息