새 ModelImages 세트를 벡터에 추가하려고하는데 디버그 어설 션 오류, _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse) 오류가 발생합니다. 이것은 생성 된 두 번째 ModelImage를 삭제하려고 할 때 발생합니다. 다음과 같이 삭제시 C++ 메모리 오류가 발생했습니다. - 디버그 어설 션 오류가 발생했습니다.
std::vector<ModelImage> ModelImages;
for(int n=0;n<nParamSets;n++)
{
ModelImage* mI = new ModelImage(MOD_WIDTH,MOD_HEIGHT);
ModelImages.push_back(*mI);
delete mI;
}
생성자와 소멸자
, 복사 및 스왑 funcitons은 다음과 같습니다ModelImage(int _width, int _height)
{
width = _width;
height = _height;
nPixels = width*height;
distance = new float[nPixels];
intensity = new float[nPixels];
derivX = new float[nPixels];
derivY = new float[nPixels];
maxDistance = 0.0f;
minDistance = 0.0f;
}
~ModelImage()
{
delete [] derivX;
delete [] derivY;
delete [] distance;
delete [] intensity;
}
ModelImage& operator=(ModelImage other)
{
swap(*this, other);
return *this;
}
friend void swap(ModelImage& first, ModelImage& second)
{
using std::swap;
swap(first.derivX,second.derivX);
swap(first.derivY,second.derivY);
swap(first.distance,second.distance);
swap(first.intensity,second.intensity);
swap(first.nPixels,second.nPixels);
swap(first.width,second.width);
swap(first.height,second.height);
}
그냥 벡터 ModelImages보고, 두 번째 ModelImage을 삭제하려고 전에 보여 그에서 두 ModelImages 벡터는 distance, intensity, derivX, derivY 배열에 대해 동일한 할당 된 메모리 주소를가집니다.
감사합니다. 감사합니다.
여기에 복사 생성자가 있으며 방금 여기에 포함되었습니다. – 3Pi
업데이트에 복사 생성자가 표시되지 않습니다. 'ModelImage (ModelImage const & other);와 같은 형태의 시그니처를 가졌을 것입니다. –
명시 적으로 지적 해 주셔서 감사합니다. 복사 및 관용구의 복사 부분을 구현하지 않았다는 것을 깨닫지 못했으며, 나는 가지고 있었다. 처음으로 그들과 함께 일했습니다. – 3Pi