动态内存管理与堆数据成员的处理
1. 悬空指针问题
在动态内存管理中,悬空指针是一个需要特别关注的问题。当使用 delete
释放堆上的内存时,虽然释放了堆内存,但局部指针变量本身并不会受到直接影响。例如,之前的两个语句释放了堆上的内存,但 pHeap
和 pHeap2
仍然指向已被释放的内存,这样的指针就被称为悬空指针。悬空指针非常危险,因为它们指向的内存可能会被计算机在任何时候以其他方式使用,所以绝对不能对悬空指针进行解引用操作。
处理悬空指针有两种常见的方法:
- 将指针赋值为 0 :
pHeap = 0;
pHeap2 = 0;
这样可以确保指针不再指向无效的内存。
- 为指针分配一个有效的内存地址 :给悬空指针赋予一个新的、有效的内存地址,使其重新指向可用的内存。
需要注意的是,对悬空指针使用 delete
可能会导致程序崩溃,所以一定要将悬空指针设置为 0 或者重新分配到一个新的有效内存块。
2. 避免内存泄漏
允许程序员手动分配和释放内存时,可能会出现内存泄漏的问题。当程序员分配了内存,但后续无法再访问该内存,从而无法释放它时,就会发生内存泄漏。如果内存泄漏足够严重,程序可能会耗尽内存并崩溃。作为游戏程序员,避免内存泄漏是一项重要的责任。
下面通过两个函数来展示可能导致内存泄漏的