C++中支持指针操作,一方面极大限度的提高了编程灵活性,但同时带来了安全隐患
通常的内存错误被归结为以下4点:内存泄露,重复释放,坏指针问题和超量写内存
1.内存泄露
在分配了一块内存空间后,如果不再需要这些数据就应当考虑将其释放。
如果被分配的内存空间不再需要时且程序员没有将其释放,那么这块空间将随同程序运行而一直存在。
这在极少情况下也有可能是正常的,但更多的时候是非常危险的。
对于一个需要运行较长时间的程序而言,如果它只是一味的分配而不进行回收,那么系统资源无疑将被耗尽。
内存的泄露通常是由回收失败导致的,如下面的例子:
异常,错误和其他各种throw和catch语句经常是导致内存泄露的原因
还有一种可能引起内存泄漏的原因是忘记了释放一个数据结构的某些部分,例如定义以下结构
在上例中,一个Student结构体被分配了内存并在程序结束的时候被释放,但是这个结构体的一些域并没有被释放
例如name和address都被分配了空间,但他们没有被释放。
注意:结构体被释放并不表示它的域也被释放了
2.重复释放