그래서이 두 번째 동적 배열은 내가 끝낼 때 해제하려는 내용입니다. 그러나 나는 소멸자 뒤에 힙 손상으로 계속 달리고있다. 소멸자를 주석 처리하면 코드가 잘 작동합니다 (물론 메모리 누수가있는 경우). (Visual Studio 2005)C++ (결국 벡터에 저장됩니다)에서 2D 동적 배열 삭제 문제
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은 포인터 또는 참조를 저장하는 대신 사본을 만듭니다.
추신. 예, 벡터를 사용해야합니다. 그러나 나는 허용되지 않습니다.
추가 정보 :
연산자 = 및 복사 생성자가 정의되지 않았습니다. 나는 그것이 그 문제의 이유라고 생각한다.
왜 소멸자에서 포인터를 형 변환하고 있습니까? – UncleZeiv
빨강, 녹색 및 파랑은 어떻게 정의됩니까? – FireAphis
복사 생성자 및 연산자 = FrameData에 대한 표시. –