24、动态内存管理与堆数据成员的处理

动态内存管理与堆数据成员的处理

1. 悬空指针问题

在动态内存管理中,悬空指针是一个需要特别关注的问题。当使用 delete 释放堆上的内存时,虽然释放了堆内存,但局部指针变量本身并不会受到直接影响。例如,之前的两个语句释放了堆上的内存,但 pHeap pHeap2 仍然指向已被释放的内存,这样的指针就被称为悬空指针。悬空指针非常危险,因为它们指向的内存可能会被计算机在任何时候以其他方式使用,所以绝对不能对悬空指针进行解引用操作。

处理悬空指针有两种常见的方法:
- 将指针赋值为 0

pHeap = 0;
pHeap2 = 0;

这样可以确保指针不再指向无效的内存。
- 为指针分配一个有效的内存地址 :给悬空指针赋予一个新的、有效的内存地址,使其重新指向可用的内存。

需要注意的是,对悬空指针使用 delete 可能会导致程序崩溃,所以一定要将悬空指针设置为 0 或者重新分配到一个新的有效内存块。

2. 避免内存泄漏

允许程序员手动分配和释放内存时,可能会出现内存泄漏的问题。当程序员分配了内存,但后续无法再访问该内存,从而无法释放它时,就会发生内存泄漏。如果内存泄漏足够严重,程序可能会耗尽内存并崩溃。作为游戏程序员,避免内存泄漏是一项重要的责任。

下面通过两个函数来展示可能导致内存泄漏的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值