Есть класс Matrix
, в конструкторе память динамически резервируется, в деструкторе - освобождается, но при попытке освободить память деструктор терпит фиаско с сообщением double free or corruption (out)
. Это происходит если cols>rows
, т.е при Matrix(3, 3)
исключения нет, а вот при Matrix(3, 4)
есть.
struct Matrix
{
double **a;
unsigned rows, cols;
Matrix(const unsigned rows, const unsigned cols):
rows(rows),
cols(cols)
{
a = new double*[rows];
for (unsigned i = 0; i < cols; ++i) {
a[i] = new double[cols];
}
}
~Matrix()
{
for (unsigned i = 0; i < rows; ++i) {
delete []a[i]; // double free or corruption (out)
}
delete []a;
}
};
int main()
{
Matrix m(3, 4);
return 0;
}
malloc/calloc/free
- та же ошибка.