51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【周活动】 找茬--心里圈的故事 !【长期招募】博为峰网校招聘兼职讲师!横扫BAT,Python全栈测试开发技能大全
【106期】:如何树立正确使用Python做开发的习惯 【征稿】提交你的测试成绩单! 【专题】用尽一切办法只为让你学好用例 自学软件测试那点事
查看: 597|回复: 0

[原创] 软件缺陷实验

[复制链接]

该用户从未签到

发表于 2019-3-29 15:42:21 | 显示全部楼层 |阅读模式
软件缺陷实验:
  1. #include <string.h>
  2. #include <iostream>
  3. using namespace std;

  4. class MyString
  5. {
  6. public:
  7.     char *mChars;
  8.     MyString()
  9.     {
  10.         mChars = new char[strlen("default value")+1];
  11.         strcpy(mChars,"default value");
  12.     }

  13.     MyString& operator=(const MyString& rhs);
  14. };

  15. MyString& MyString::operator =(const MyString& rhs)
  16. {
  17.    /*if(&rhs==this)
  18.         return *this;*/
  19.     if(rhs.mChars != NULL)
  20.     {
  21.         delete []mChars;
  22.         mChars = new char[strlen(rhs.mChars)+1];
  23.         strcpy(mChars,rhs.mChars);
  24.     }
  25.     else
  26.     {
  27.         mChars = NULL;
  28.     }

  29.     return *this;
  30. }

  31. int main()
  32. {
  33.     MyString a;
  34.     cout<<"a.mChars is "<<a.mChars<<endl;
  35.     a=a;
  36.     cout<<"a.mChars is"<<a.mChars<<endl;
  37.     return 0;
  38. }
复制代码


结果截图:

取消注释后:

加上注释后:


断点调试:






在“=”重载操作中,如果涉及指针操作,则必须判断两个对象是否为同一个对象,否则指针*p执行了两次释放操作中,可能会造成死机。
如果在上面的程序中,缺少if(&rhs==this) return *this,则指针将会被释放两次。
今天软件测试课讲得,其实也不是特别理解。当去掉注释的时候,两个a值是一样的,后续弄懂更,先记录一下。。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /2 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2019-9-16 14:29 , Processed in 0.055649 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2019 Comsenz Inc.

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