VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 56|回复: 1

析构函数delete指针的问题

[复制链接]
16_avatar_middle
最佳答案
0 
在线会员 发表于 2020-8-11 19:04:33 | 显示全部楼层 |阅读模式
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. class person{
  5. public:
  6.         char* pname;
  7.                 person(char *name)
  8.                 {       
  9.                 int len = strlen(name);
  10.                 pname = new char(len+1);
  11.                 memset(pname,0,len+1);
  12.                 strcpy(pname,name);
  13.                 cout << pname <<endl;
  14.                 }

  15.                 ~person(){
  16.                         if(pname){
  17.                                 delete[] pname;
  18.                                 cout << "析构调用";
  19.                         }
  20.                 }

  21. };
  22. int main(){
  23.        
  24.        
  25.         {
  26.                 person st1("123231321231312123312");
  27.                 person st2("213123");
  28.         }
  29.         system("pause");
  30.         return 0;
  31. }
复制代码


如上面代码 我实例化了st1与st2
类里面有一个new出来的指针,析构是调用完后删除指针。
按理说我st1调用后会new指针在析构delete删除
st2为什么会和st1的指针是同一块内存区域呢??我st2实例化后  按道理应该也得new出来一个指针呀




上一篇:运算符重载
下一篇:为ListCtrl控件的行添加图标
84_avatar_middle
最佳答案
3 
在线会员 发表于 2020-10-13 10:59:51 | 显示全部楼层
本帖最后由 dwer 于 2020-10-13 11:13 编辑

不可能的,你在st2的时候 st1的值还没有析构, 不可能指向同一块内存区域, 那st1.pname的内容变成了啥,
你检查下可能是不是有其他问题


//BS
赠送一个,注意小括号和中括号的区别
   pname = new char(len+1);
改成
   pname = new char[len+1];
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2021-1-21 16:36

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表