当前位置: 首页 > 图文教程 > 开发语言 > C/C++ > C++内存管理

C/C++
VC++ SMTP协议电子邮件传送剖析
Managed C++设计新邮件检查器
解决两个难懂的安全性问题
高级扫描技术及原理介绍
VC的另类数据库编程
Visual C++6.0 API函数操作技巧集
托盘编程全接触
在Visual C++中使用内联汇编
理解 Visual C++ Extensions for ADO
TCP/IP Winsock编程要点
VC打造自己特色的屏幕保护
Windows Sockets API实现网络异步通讯
程序界面多模式显示的实现
VC++6.0中控制运行唯一实例
WDM驱动程序设计之编译安装篇
VC编程中如何操作数据库中的图像字段
Windows 9X硬件中断设备驱动程序的开发
用控件聚合技术为FlexGrid增添PickList功能
用ATL和MFC来创建ActiveX控件
用VC进行COM编程所必须掌握的理论知识

C/C++ 中的 C++内存管理


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 187 ::
收藏到网摘: n/a

 

内存分配方式有三种:

1、从静态存储区域分配。内存在程序编译的时候就已经分配好了,这些内存在程序的整个运行期间都存在。例如:全局变量,static变量等。

2、在堆栈上分配。在函数执行期间,函数局部变量的存储单元都创建在堆栈上,函数结束时这些存储单元自动释放。

3、从堆(heap)或自由存储空间上分配,亦称动态内在分配。程序在运行期间自己分配和释放内存,常用newdelete

注意:

1、函数的return语句,不要返回指向“栈内存”的指针或者引用,因为该内存在函数结束时被自动释放;

2、使用free()delete释放了内存后,没有将指针设置成NULL,产生“野指针”;

3、我们申请内存后,应该立即检查指针值是否为NULL或者进行异常处理,以防止使用值为NULL的指针,我们可以在函数的入口处用assert(p!=NULL)来进行检查以避免输入非法参数或者用if语句来判断。

4、不要忘记初始化指针、数组和动态内存,防止将未初始化的内存作为右值使用;

5、释放内存之后,立即将指针设置为NULL,防止产生“野指针”。

6、如果函数参数是一个指针,不要指望用该指针去申请动态内存。如果非得用指针参数去申请内存,那么应该改用“指向指针的指针”或者“指针的引用”;同时用函数返回值来传递动态内存;

7、不等于NULL的指针不一定是有效指针,所以一定不要忘记初始化指针变量为NULL或者有效地址。

8、指针消亡了,并不表示它的所指向的内存会被自动释放;内存被释放了,并不表示指针会消亡或者成为NULL

9、malloc()的原型:void *malloc(size_t size);对应的void free(void *memblock)