鱼C论坛

 找回密码
 立即注册
查看: 3806|回复: 1

小甲鱼的 C++快速入门,第36课的例题 delete ptr 崩溃程序

[复制链接]
发表于 2013-7-5 15:42:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼的 C++快速入门,第36课的例题,我原样照抄下来之后,发现 delete ptr 这个代码直接让游戏崩溃了,然我有把甲鱼大大的源代码打开,编译之后还是卡在那个地方,直接崩溃程序,我的系统是win7 64位,vc++6.0 和 vs2008 都出问题。希望有人能帮我解答下,在线等!!!!急!


代码如下:
#include <iostream>
#include <string>
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;
}

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-6 10:29:11 | 显示全部楼层
好吧,没人解答,我自问自解,
首先,delete 关键字必须要和一个 new匹配,如果delete的数据不是new申请的内存,那么就必定报错,我用过CodeBlocks,vs2008, vc++6.0 ,全部报错,然后我在副本构造函数里面,加了一条 ptr = new int;
一切就正常了,只要记住在delete之前一定要先清楚你的变量是否是动态内存申请出来的内存。!!!求大大补充!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-20 01:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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