我尝试实现一个队列(数据结构)。 当我删除包含删除操作时,我有一些问题,只有当我删除了函数" delete * char" ,它的工作,对我来说看起来很奇怪。 我的代码: Node.h
class Node
{
public:
Node();
Node(char*,int);
~Node();
Node(const Node& t);//copy c`tor
Node& operator= (const Node&);
.....
private:
char * name;
int money;
.....
};
Node.cpp:
Node::Node() //c`tor
{}
Node::~Node() //d`tor
{
//delete [] name;
}
Node::Node(char * n,int m){ //c`tor
name = new char[strlen(n)+1];
strcpy(name,n);
money = m;
}
Node::Node(const Node& t){ //copy c`tor
name = new char[strlen(t.name)+1];
strcpy(name,t.name);
money = t.money;
}
Node& Node::operator= (const Node& t){
if(this != &t){
name = new char[strlen(t.name)+1];//EDITED
strcpy(name,t.name);
}
return *this;
}
main.cpp
int main()
{
Node k1("Naor",100),k2("Klock",200);
return 0;
}
编辑1: 我修复了在operator =的分配,并且错误没有连接到Queue类,所以我也删除了它们,仍然是运行时错误。
答案 0 :(得分:1)
看起来你没有实现operator=()
,这意味着它是由编译器生成的。因此,在这种情况下,Node
将被简单复制,并且您在delete[] name
电话上有双免费。
<强>更新强>
除了上面说的这段代码是一种未定义的行为,因为你strcpy()
没有分配内存,因为默认的构造函数没有分配它。
Node& Node::operator= (const Node& t){
if(this != &t){
strcpy(name,t.name);
}