首页 > 其他 > 详细

函数内动态分配内存

时间:2015-11-02 21:05:57      阅读:275      评论:0      收藏:0      [点我收藏+]

 

void fun() 
{ 
    char* s = (char*)malloc(100); 
} 

操作系统为程序分配空间分栈和堆~~ "定义"局部普通变量和局部指针变量时,只是在栈里分配了块空间,由高地址向低地址扩展,在函数调用结束后自动释放。而定义全局变量,静态变量,指针用malloc或new分配空间是在堆里分配的,除非是程序完全退出才释放,而malloc或new的要想用完就释放的调用free和delete来释放~~~ 

char* s = (char*)malloc(100); //开辟了两个空间,S在栈中,malloc(100)在堆中
指针s是局部指针变量(在栈中分配),所以执行完 fun函数后S已弹栈(既释放),而堆中申请的malloc(100)没有释放 ,必须由程序员释放, 若程序员不释放(会造成内存泄漏),程序结束时可能由OS回收.

S已经被释放,但内存没有收回。内存泄露!
说白了:就是S这个变量被删除了,不能再使用了,但它申请的那快内存切还是有效的,可以使用。但是拿什么去使用它?(S都没有了)。可以在后面加return s(当然函数的void要改掉,然后用个变量去接受传回来的内存地址!)

函数内动态分配内存

原文:http://www.cnblogs.com/xunbu7/p/4931153.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!