24小时热门版块排行榜    

查看: 1585  |  回复: 6

zzahkj

木虫 (著名写手)

龙

[求助] C++ 运行出现Debug Assertion Failed的错误?

程序源码如下:
CODE:
#include
#include

class MyClass
{
public:
        MyClass(int *p);
        MyClass(const MyClass &rhs);
        ~MyClass();

        MyClass &operator=(const MyClass &rhs);
        void print();
private:
        int *ptr;
};

MyClass::MyClass(int *p)
{
        std::cout << "进入主构造器\n";
        ptr = p;
        std::cout << "离开主构造器\n";
}

MyClass::MyClass(const MyClass &rhs)
{
        std::cout << "进入副本构造器\n";
        *this = rhs;
        std::cout << "离开副本构造器\n";
}

MyClass::~MyClass()
{
        std::cout << "进入析构器\n";
        delete ptr;
        std::cout << "离开析构器\n";
}

MyClass &MyClass::operator =(const MyClass &rhs)
{
        std::cout << "进入赋值语句重载\n";
        if (this != &rhs )
        {
                delete ptr;

                ptr = new int;
                *ptr = *rhs.ptr;
        }
        else
        {
                std::cout << "赋值号两边为同个对象,不做处理!\n"; //obj1=obj1;
        }

        std::cout << "离开赋值语句重载\n";

        return *this;
}

void MyClass::print()
{
        std::cout << *ptr << std::endl;
}

int main()
{
        MyClass obj1(new int(1));
        MyClass obj2(new int(2));
        obj2=obj1;
        obj1.print();
        obj2.print();

        std::cout << "---------------------------\n";

        MyClass obj3(new int(3));
        MyClass obj4 =obj3;
        obj3.print();
        obj4.print();

        std::cout << "---------------------------\n";

        MyClass obj5(new int(5));
        obj5 = obj5;
        obj5.print();

        return 0;
}

然后运行出错:如下

未命名1.jpg



未命名.jpg
回复此楼
不要迷恋哥,哥只是一个过客!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

感谢参与,应助指数 +1
什么编译器?为什么我运行没出错?vs2008
CODE:
进入赋值语句重载
离开赋值语句重载
离开副本构造器
3
3
---------------------------
进入主构造器
离开主构造器
进入赋值语句重载
赋值号两边为同个对象,不做处理!
离开赋值语句重载
5
进入析构器
离开析构器
进入析构器
离开析构器
进入析构器
离开析构器
进入析构器
离开析构器
进入析构器
离开析构器

Process returned 0 (0x0)   execution time : 0.060 s
Press any key to continue.

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-10-12 17:16:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)

龙

引用回帖:
2楼: Originally posted by libralibra at 2012-10-12 17:16:27
什么编译器?为什么我运行没出错?vs2008

进入赋值语句重载
离开赋值语句重载
离开副本构造器
3
3
---------------------------
进入主构造器
离开主构造器
进入赋值语句重载
赋值号两边为同个对象,不做 ...

VC++ 6.0编译器 难道是编译器的问题?
不要迷恋哥,哥只是一个过客!
3楼2012-10-12 18:04:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

xzhdty: 谢谢骠骑将军 2012-10-12 23:41:10
很有可能是编译器问题.vc6很早被建议不再使用了
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
4楼2012-10-12 20:49:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zzahkj

木虫 (著名写手)

龙

引用回帖:
4楼: Originally posted by libralibra at 2012-10-12 20:49:09
很有可能是编译器问题.vc6很早被建议不再使用了

我用VS2008也会出错啊?
0x102d31ea (msvcr90d.dll) 处未处理的异常: 0xC0000005: 读取位置 0xccccccc0 时发生访问冲突
如下图:

未命名.jpg

不要迷恋哥,哥只是一个过客!
5楼2012-10-12 21:24:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lpdd2010

木虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
jjdg: 金币+1, 感谢指导 2012-10-16 10:43:38
zzahkj: 金币+10, ★★★★★最佳答案, 虽然不是太懂,但觉得应该是这个问题,谢谢! 2012-10-16 13:05:08
遇到问题还是单步调试下,你就明白了
执行
MyClass obj4 =obj3;
会执行
MyClass::MyClass(const MyClass &rhs)
{
         std::cout << "进入副本构造器\n";
         *this = rhs;
         std::cout << "离开副本构造器\n";
}
在该语句中,
*this = rhs;
而成员变量ptr还没有申请内存,为野指针,对于野指针赋值,当然会出现问题啦。
6楼2012-10-15 23:39:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xinjitmzy

银虫 (小有名气)

c想学c++
我等待我的幸福!
7楼2012-10-16 08:49:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 zzahkj 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +8 wangyl_123 2026-10-10 12/600 2026-10-13 20:40 by Merryya
[硕博家园] 极限拉扯,如何抉择 +9 Isak0320 2026-10-12 13/650 2026-10-13 11:57 by Isak0320
[教师之家] 课题组会帮你通过考核么? +4 好运来~9527 2026-10-10 7/350 2026-10-13 08:41 by xli1984
[基金申请] 入职后第一次管课题组的专利缴费,对账才发现官费比别人多掏了一倍 +6 13108017953 2026-10-08 6/300 2026-10-12 20:07 by w3w3y3
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[教师之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见