C++之delete常见错误总结

举报
chenyu 发表于 2021/07/26 23:24:45 2021/07/26
【摘要】 1、动态分配内存后释放了一次,再次释放 1)直接删除2次 int main(){ int *a = new int(50); cout<<*a<<endl; delete a; delete a; return 0;} 2)另外一个指针指向分配的内存,然后把这个2个指针都删除 int* p1 = new i...

1、动态分配内存后释放了一次,再次释放

1)直接删除2次


   
  1. int main()
  2. {
  3. int *a = new int(50);
  4. cout<<*a<<endl;
  5. delete a;
  6. delete a;
  7. return 0;
  8. }

2)另外一个指针指向分配的内存,然后把这个2个指针都删除


   
  1. int* p1 = new int(50);
  2. int* p2 = p1; //p2和p1 现在指向同一内存地址
  3. cout << *p1 << endl;
  4. cout << *p2 << endl;
  5. delete p1; //OK
  6. delete p2; //ERROR! p2所指的内存,已通过delete p1而被释放,不可再delete一次
 
 
 

2、删除是一个普通指针或者不是一个指针

1)删除的是一个普通指针


   
  1. nt a = 50;
  2. int *p = &a;
  3. delete p

2) 删除的不是一个指针


   
  1. string ss = "chenyu";
  2. delete ss;

 

 

3、删除了由系统释放

文章来源: chenyu.blog.csdn.net,作者:chen.yu,版权归原作者所有,如需转载,请联系作者。

原文链接:chenyu.blog.csdn.net/article/details/63702336

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。