c语言之栈存储区和堆区理解
来源:互联网 发布:英国大学网络教育 编辑:程序博客网 时间:2024/06/03 21:58
栈:就是迟到早退、先进后出;内存的分配、释放管理都是由系统自己完成,不需要自己管理;
堆:是由自己动态申请的,如果不释放,会一直存在的;申请内存的时候会用到关键字mallco
下面是一个堆的申请返回和栈的内存分配返回 可以看出它们的生命周期和内存管理机制
//手动申请内存空间 这是存储与堆中的char* getMalloc(int num){char* p1 = NULL;/*malloc:申请内存空间的关键字,需要申请多大的内存空sizeof:求出一个类型的字节数sizeof(char):char类型所占的字节数sizeof(char)*num:所要申请的总字节数把申请的堆地址赋值给局部变量 同时局部变量也会被放入栈中 有自己的存储空间*/p1 = (char*)malloc(sizeof(char)*num);//这里判断是否申请成功,可能会存在申请失败的情况if (p1 == NULL){return NULL;}//返回申请的地址 然后析构p1 栈中不会存在p1,自动释放return p1;}char* getStatck(){//在栈中分配64字节的空间char arry[64]; //向栈空间中写入数据strcpy(arry, "Rose_Girls");/*这里返回arry的内存地址, 在这里会出现问题的,由于arry是临时变量,离开当去区域,就会被析构,*/return arry;}int _tmain(int argc, _TCHAR* argv[]){char* tmp = NULL;tmp = getMalloc(100);if (tmp == NULL){printf("申请失败");return 0;}//向tmp所指向的内存空间写入数据,也就是给申请的内存空间中写入数据strcpy(tmp, "Rose_Grils");//调用栈中内存的返回值 由于是局部临时变量 返回会存在问题tmp = getStatck();return 0;}
1 0
- c语言之栈存储区和堆区理解
- c语言之栈存储区和全局区理解
- 深入理解C语言堆和栈
- C语言栈、堆和静态区
- C语言栈、堆和静态区
- C语言栈、堆和静态区
- c语言中变量(存储区 栈)和malloc(动态申请 堆)的区别
- c存储区栈、堆
- c存储区栈、堆
- C语言编程之道 (有感 静态变量和动态变量, 静态存储方式和动态存储方式 堆+栈)
- 深入理解C语言中的堆和栈
- 堆,栈,静态存储区的理解
- C++,java等高级语言的内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- c语言之堆区二维数组
- C/C++ 堆、栈、自由存储区、全局/静态存储区和常量存储区
- C/C++堆、栈、自由存储区、全局/静态存储区和常量存储区
- 静态存储区、动态存储区、堆、栈理解
- C语言中的堆区和栈区
- 念-志摩
- 基础功能测试架构
- 1006. 换个格式输出整数 (15)
- 使用loadrunner进行性能测试(二)--参数化
- HDU——1108 最小公倍数
- c语言之栈存储区和堆区理解
- MAC 下 excel 如何使用加载项(宏)
- (A^B)%C 快速幂乘
- J2EE项目从Myeclipse中转换到eclipse中
- jni调试错误 Error while obtaining file from device 。。 com.android.ddmlib.SyncException: Writing local
- ubuntu14.04 安装并破解MyEclipse2014
- ARC 循环strong的问题
- CAS实现SSO单点登录原理
- AppStore上架问题ERROR ITMS-90049