析构函数删除中的运行时错误。 C ++

时间:2017-11-09 12:59:05

标签: c++ oop

我尝试实现一个队列(数据结构)。 当我删除包含删除操作时,我有一些问题,只有当我删除了函数" 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类,所以我也删除了它们,仍然是运行时错误。

1 个答案:

答案 0 :(得分:1)

看起来你没有实现operator=(),这意味着它是由编译器生成的。因此,在这种情况下,Node将被简单复制,并且您在delete[] name电话上有双免费

<强>更新

除了上面说的这段代码是一种未定义的行为,因为你strcpy()没有分配内存,因为默认的构造函数没有分配它。

Node& Node::operator= (const Node& t){
    if(this != &t){
    strcpy(name,t.name);
}