所以我有这个二维动态数组,当我完成它时我想释放它的内容。但是,在析构函数之后,我一直遇到堆损坏。如果我注释掉析构函数,代码可以正常工作(当然有内存泄漏)。(视觉工作室 2005)
FrameData::FrameData(int width, int height)
{
width_ = width;
height_ = height;
linesize[0] = linesize[1] = linesize[2] = linesize[3] = 0;
// Initialise the 2d array
// Note: uint8_t is used by FFMPEG (typedef unsigned char uint8_t)
red = new uint8_t* [height];
green = new uint8_t* [height];
blue = new uint8_t* [height];
for (int i=0; i < height; i++)
{
red[i] = new uint8_t [width];
green[i] = new uint8_t [width];
blue[i] = new uint8_t [width];
}
}
FrameData::~FrameData()
{
// Delete each column
for (int i=0; i < height_; i++)
{
delete[] ((uint8_t*) red[i]);
delete[] ((uint8_t*)green[i]);
delete[] ((uint8_t*)blue[i]);
}
// Final cleanup
delete[] red;
red = NULL;
delete[] green;
green = NULL;
delete[] blue;
blue = NULL;
}
我不知道代码有什么问题。唯一的另一件事是在其他地方,我在发生崩溃的循环中这样做了
FrameData myFrame;
std::vector<FrameData> frames;
...snipped...
frames.push_back(myFrame);
这应该不会造成任何问题,对吧?如果我没记错的话, push_back 会创建一个副本,而不是存储指针或引用。
PS。是的,我应该使用向量。但我不被允许。
附加信息:
未定义 operator= 和复制构造函数。我想这是问题的原因。