gpt4 book ai didi

c++ - 复制构造函数演示(崩溃...)

转载 作者:太空宇宙 更新时间:2023-11-04 14:46:27 24 4
gpt4 key购买 nike

这是程序...

class CopyCon
{
public:
char *name;

CopyCon()
{
name = new char;
}

CopyCon(const CopyCon &objCopyCon)
{
name = new char;
_tcscpy(name,objCopyCon.name);
}

~CopyCon()
{
if( name != NULL )
{
delete name;
name = NULL;
}
}
};

int main()
{
CopyCon objCopyCon1;
objCopyCon1.name = "Hai";
CopyCon objCopyCon2(objCopyCon1);
objCopyCon1.name = "Hello";
cout<<objCopyCon2.name<<endl;
return 0;
}

一旦代码执行完成,当调用析构函数时,它会在“删除”时崩溃,说...

调试错误!

程序:...

检测到堆损坏:在 0x00366990 处的正常 block (#124) 之后。CRT 检测到应用程序在堆缓冲区结束后写入内存。

(按重试调试应用程序)

难道我们必须在析构函数中清除堆内存。这个程序有什么问题?请有人帮忙!复制构造函数按预期完美工作。但是还是……!?

最佳答案

问题是您在复制构造函数中只分配了一个 char

main 中,您分配了一个 4 字节的字符串(记住 null),但是当您复制对象时,您只分配了 1 个字节的空间。

你可能想做的是改变

name = new char;

name = new char[tcslen(objCopyCon.name) + 1];

在析构函数中:

delete name;

delete [] name;

还有:

您正在将 "Hai""Hello" 分配给 objCopyCon1.name,它隐藏了在构造函数中分配的内存。 此内存永远无法释放!

关于c++ - 复制构造函数演示(崩溃...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com