だから私はこの2D動的配列を持っています。それが終わったらコンテンツを解放したいのです。しかし、デストラクタの後でヒープの破損に遭遇し続けます。デストラクタをコメントアウトすると、コードは正常に機能します(もちろんメモリリークが発生します)。(Visual Studio 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=およびcopyコンストラクターは定義されていません。それが問題の理由だと思います。