У меня есть программа, которая выполняет операции над вектором, не изменяя их, а просто считывая один раз, а затем записывая то, что требуется на основе того, что дается. Моя программа работает, но я получаю эту ошибку в конце;Ошибка двойного освобождения или коррупции (! Prev) в моем деструкторе C++
*** Error in './volimage: double free or corruption (!prev): 0x00000000123c10 ***
Я гугл, и это, кажется, проблема с моим деструктором, но я не могу за жизнь мне найти или решить.
Это деструктор:
VolImage::~VolImage()
{
std::cout << "Destructor" << std::endl;
//deconstructing the vector of slices
int i, j, k;
for (i = 0; i<size; i++)
{
for (j = 0; j<height; j++)
{
delete[] slices[i][j];
}
delete[] slices[i];
}
slices.clear();
}
Вектор был заселен с помощью следующего:
std::vector<unsigned char**> slices; // data for each slice, in order
//populating vector
int i, j, k;
unsigned char ** rows = new unsigned char*[height];
for (i = 0; i < size; i++)
{
for (j = 0; j < height; j++)
{
unsigned char* cols = new unsigned char[width];
string num = "%d" + j;
fileName = baseName + num + ".raw";
myFile.open(fileName);
for (k = 0; k < width; k++)
{
unsigned char x;
myFile >> x;
cols[k] = x;
}
myFile.close();
rows[i] = cols;
}
slices.push_back(rows);
}
Спасибо, поспешный ответ будет оценен, как я должен представить это в ближайшее время
Не должно быть 'rows [j] = cols;' вместо 'rows [i] = cols;'? То есть 'j', а не' i'? – dasblinkenlight
Не видел этого, спасибо, но я все еще получаю проблему с уничтожением –
Почему бы вам просто не использовать вектор вектора векторов? – dreamlax