我想知道与C和C++相关的常见内存管理问题是什么.我们如何调试这些错误.
我知道的很少
1)未初始化的变量使用
2)删除指针两次
3)写出数组越界
4)未能释放内存
5)比赛条件
1)malloc传回一个NULL指针.您需要将此指针强制转换为您想要的任何内容.
2)对于字符串,需要为结束字符分配一个额外的字节.
3)双指针.
4)(删除和malloc)和(免费和新)不一起去
5)查看实际函数在失败时返回(返回代码)的内容,如果失败则释放内存.6)检查大小分配内存malloc(func +1)
7)检查你如何通过双pointe**ptr来运行
8)检查行为未定义函数调用的数据大小
9)内存分配失败
首先抢先防止这些错误:
1)将警告转到错误级别以克服未初始化的错误.编译器会经常发出这样的警告,并将它们作为错误访问,您将被迫解决问题.
2)使用智能指针.你可以在Boost中找到这些东西的好版本.
3)使用载体或其他STL容器.除非您使用其中一种Boost变种,否则不要使用数组.
4)同样,使用容器对象或智能指针为您处理此问题.
5)在任何地方使用不可变数据结构,并在共享可变对象的修改点周围放置锁.
处理遗留应用程序
1)与上述相同.
2)使用集成测试来查看应用程序的不同组件如何发挥作用.这应该找到很多这种错误的情况.认真考虑由另一个小组完成正式的同行评审,编写与您的裸指针接触的应用程序的不同部分.
3)您可以重载new运算符,以便在对象之前和之后分配一个额外的字节.然后应该用一些易于识别的值填充这些字节,例如0xDEADBEEF.您需要做的就是检查之前和之后的前一个字节,以确认您的内存是否以及何时被此类错误损坏.
4)通过多次运行应用程序的各种组件来跟踪内存使用情况.如果你的记忆力增长,检查是否缺少解除分配.
祝你好运.对不起,但这是99.9%的时间可以工作的事情之一,然后,繁荣!客户抱怨.