显式调用析构函数时的c ++内存错误("双重释放或损坏")

Joh*_*ith 0 c++ memory glibc

我有" *glibc检测到/ home/ubuntu [....]:双免费或腐败(fasttop):0x09851168**"问题.

调试我找出了似乎是问题根源的那一行:

data[i]->~Class();
Run Code Online (Sandbox Code Playgroud)

这是指

 class Class {
public:
    Class();
    Class(char *name, double value);
    virtual ~Class();
    char *name;
    double value;
private:

};
Run Code Online (Sandbox Code Playgroud)

然后

    Class::Class() {
}

Class::Class(char* name, double value){
    this->name = new char[std::strlen(name)];
    std::strcpy(this->name, name);
    this->value = value;
}

Class::~Class() {
    delete name;
}
Run Code Online (Sandbox Code Playgroud)

现在,显然我在那里做错了什么.任何人都可以告诉我什么?

Gre*_*ill 7

你做错的事情是显式调用析构函数:

data[i]->~Class();
Run Code Online (Sandbox Code Playgroud)

除非你绝对知道你应该明确地调用它(这是不寻常的,并且许多大型程序从来没有必要这样做),你可能应该使用delete:

delete data[i];
Run Code Online (Sandbox Code Playgroud)