C++虽然可以动态的管理内存,但是并不能像其他高级语言如JAVA、C#有自动垃圾收集器去对应用程序的内存进行清理。
常见指针错误
内存泄漏
解释:
在使用完new申请内存之后,没有配套的delete,则之后会产生内存泄漏。
即如何理解,当ptr指向new1,使用完成以后未使用delete对new1所占用的空间释放,然后又将ptr=new2,则会产生内存泄漏,即new1未被释放的同时也没有指针指向,即产生内存泄漏。
伪代码:
cpp
int* ptr = new int[5];
//forget delete
ptr = new int[10];//产生内存泄漏
危害:
占用内存越多,系统运行越慢,内存泄漏会占用宝贵的内存资源。
指针指向无效的内存单元
解释:
ptr中必须存放的是有效的内存地址,即*ptr为有效的数值
伪代码:
cpp
char* ptr;
if(tmp=='Y')
{
ptr=new char;
*ptr = true;
}
//出错情况一,若tmp!=Y
std::cout<<*ptr<<std::endl;
//出错情况二
delete ptr;
危害:
即会产生系统崩溃
悬浮指针
解释:
即在delete之后ptr变得无效,则就不能再使用它了
指针编程最佳实践
应该
(1)初始化指针变量,若不初始化则可能不具有访问权限,产生冲突
(2)必须字指针有效时才能使用它
(3)new一定要与delete相配套
不应该
(1)delete之后不可再次访问
(2)不能对同一个地址进行多次delete