C++指针篇常见的错误

指针常见的错误

1 内存泄漏

造成内存泄漏的几种情况:

①通过c语言的malloc系统函数以及c++的new运算符动态内配的内存空间,使用完之后程序员没有手动释放! ②在有异常处理的程序中,即时使用了free或者delete但是由于异常的原因没有得到执行

/* 这里提供一段伪代码 */
try{
  type* pointer = malloc(sizeof(type));
  //此处抛出异常
  free(pointer);  //这里不会执行
}catch(...){
  //捕捉到异常
}
复制代码

2 野指针的使用

基本概念:野指针指的是指向"垃圾"内存的指针

指针变成野指针的情况概述:

①free或者delete之后的指针,free和delete只是释放了该指针指向的内存空间,"但是该指针的值还是malloc或者new分配的内存的地址",继续使用它去访问这个内存地址是会发生错误的!

注意:当释放掉动态内存空间之后,将先前指向它的指针的值设置为NULL;在创建指针变量的时候,给指针一个初始值,因为不指定初始值的话,指针的值是随机的,这有时候会导致不可预期的错误!

建议:定义指针变量的时候尽量初始化,哪怕初始化为NULL也好;这是一个很好的编程习惯!

②将局部变量的地址返回

出现的问题:因为a是局部变量,只有在func函数作用域中有效,它的内存空间是属于栈内存的,一旦func执行完之后,系统会自动回收它的内存空间,所以再次使用的话会发生错误!

解决方法:将局部变量使用static修饰,因为在c++中,static修饰的变量的生命周期是整个程序运行期间,与程序"同生共死";

int* func(){
  int a = 8;
  return &a;
}

int main(){
  int* p = func();
  cout<<"p:"<<*p<<"\n";

}
复制代码

3 NULL指针

出现NULL指针的情况

①使用malloc或者new动态分配内存的时候:

对于malloc和new来说,当内存分配失败的时候回返回NULL,所以如果不做判断的话就会发生错误;

②当使用指针作为函数的参数的时候:

对于含有指针参数的函数来说,当使用者传入一个NULL的指针的话也是会发生错误的;

注意:为了避免以上两种情况的发生,我们再程序中加一个if判断

if (pointer == NULL)
  停止执行任务
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值