析构函数删除数组时的错误

时间:2012-03-24 18:02:00

标签: c++ arrays delete-operator

class Celda
{
private:
    int* bloques_;
public:
    Celda(int size);
    ~Celda(){ delete [] bloques_; };
};
Celda :: Celda(int size)
{
    bloques_ = new int[size];
    bloq_ocupados_ = 0;
    tam_ = size;
    for(int i = 0 ; i < tam_ ; ++i){
        bloques_[i] = 0;
    }
}

Tabla :: Tabla(int numcel, int tambloq)
{
    nceldas_ = numcel; tam_bloque_ = tambloq;
    tabla_ = new Celda*[nceldas_];
    for(int i = 0 ; i < nceldas_ ; ++i){
        tabla_[i] = new Celda(tam_bloque_);
}
    ocupadas_ = 0;
}

Tabla :: ~Tabla()
{
    for(int i = 0 ; i < nceldas_ ; ++i){
        delete [] tabla_[i];
    }
    delete [] tabla_;
}

我现在有这个编码,2个班,Celda和Tabla,当我运行我的程序时,它放在最后:

*检测到glibc:free():invalidad指针:0x0000000002391338 *

调试器停止删除bloques_指针太多次(比如30)调用我认为的析构函数。

我的错误是什么?

1 个答案:

答案 0 :(得分:5)

new / new []的使用必须与delete / delete []的使用相匹配。

tabla_ [i]分配了new,但是删除了[]。

将其更改为

 delete tabla_[i];

它会起作用。