c语言栈和堆存储的内容,c语言之栈存储区和堆区理解

栈:就是迟到早退、先进后出;内存的分配、释放管理都是由系统自己完成,不需要自己管理;

堆:是由自己动态申请的,如果不释放,会一直存在的;申请内存的时候会用到关键字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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值