<八>裸指针万恶之源

• 所有权不清晰(谁分配,谁释放?)
• 对象类型不清晰(栈对象、堆对象、数组对象、资源句柄?)
• 错误百出的指针
• 内存泄漏——忘记delete之前new的内存
• 悬浮指针—— 使用已释放内存(读取、或写入)、返回栈对象地址
• 重复删除—— 对已经删除过的对象,进行二次删除
• 删除非堆对象指针——对栈对象、全局/静态对象地址进行删除
• 分配与删除错误匹配—— new和free搭配,malloc和delete搭配,new和
delete搭配,new[]和delete[] 搭配

int * parray =new int[100];
单纯只看看到parray,只能知道是个 int * , 不能确定是 delete parray or delete [] parray ;

• 使用空指针
• 使用失效引用(悬浮引用,悬浮指针)

关于裸指针的各种错误使用
int* glob;
void process(int* q){
  // …
  glob = q; 
}

void g1(){
  int* p = new int{7};
  process(p);
  delete p;//删除了堆内存,但是全局变量还指向了这块内存区域
  // … 
  *glob = 9; //悬浮指针
}

void g2(){
  int* p = new int{7};
  process(p);
  delete p; 
  // …
  delete glob;  //重复释放
}

void g3(){
  int x = 7;
  int* p = &x;
  process(p);
  // …
  delete glob;// 释放栈指针
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值