C++中的内存管理问题

bre*_*ett 3 c c++

我想知道与C和C++相关的常见内存管理问题是什么.我们如何调试这些错误.

我知道的很少

1)未初始化的变量使用

2)删除指针两次

3)写出数组越界

4)未能释放内存

5)比赛条件

1)malloc传回一个NULL指针.您需要将此指针强制转换为您想要的任何内容.

2)对于字符串,需要为结束字符分配一个额外的字节.

3)双指针.

4)(删除和malloc)和(免费和新)不一起去

5)查看实际函数在失败时返回(返回代码)的内容,如果失败则释放内存.6)检查大小分配内存malloc(func +1)

7)检查你如何通过双pointe**ptr来运行

8)检查行为未定义函数调用的数据大小

9)内存分配失败

Rob*_*b K 9

使用RAII(资源获取是初始化).您几乎不应该在代码中直接使用new和delete.


whe*_*ies 6

首先抢先防止这些错误:

1)将警告转到错误级别以克服未初始化的错误.编译器会经常发出这样的警告,并将它们作为错误访问,您将被迫解决问题.

2)使用智能指针.你可以在Boost中找到这些东西的好版本.

3)使用载体或其他STL容器.除非您使用其中一种Boost变种,否则不要使用数组.

4)同样,使用容器对象或智能指针为您处理此问题.

5)在任何地方使用不可变数据结构,并在共享可变对象的修改点周围放置锁.

处理遗留应用程序

1)与上述相同.

2)使用集成测试来查看应用程序的不同组件如何发挥作用.这应该找到很多这种错误的情况.认真考虑由另一个小组完成正式的同行评审,编写与您的裸指针接触的应用程序的不同部分.

3)您可以重载new运算符,以便在对象之前和之后分配一个额外的字节.然后应该用一些易于识别的值填充这些字节,例如0xDEADBEEF.您需要做的就是检查之前和之后的前一个字节,以确认您的内存是否以及何时被此类错误损坏.

4)通过多次运行应用程序的各种组件来跟踪内存使用情况.如果你的记忆力增长,检查是否缺少解除分配.

祝你好运.对不起,但这是99.9%的时间可以工作的事情之一,然后,繁荣!客户抱怨.