나는 멤버 할당 mBoundingBox는 다음과 같은 구조체 코드에서VS 2010 C++ 충돌은
typedef struct
{
unsigned int xMin;
unsigned int yMin;
unsigned int xMax;
unsigned int yMax;
} boundingBox;
class CImgProc
{
public:
CImgProc(void);
virtual ~CImgProc(void);
...
boundingBox *mBoundingBox;
...
}
의 구성 멤버 함수와 클래스가 배열 인덱스를 사용하여 포인터를 할당하지 말고 종료하면 다음을 수행합니다.
if (mBoundingBox != NULL) delete [] mBoundingBox;
오류가 발생했습니다.
입력 사항이 있습니까?
업데이트 됨. 소멸자에서 종료시 오류가 발생합니다. VS에 의해 생성 된 메시지는 다음과 같습니다.
Windows에서 ProcImage.exe에서 중단 점이 트리거되었습니다.
이 될 수 인해 힙의 부패 ... 인해 ProcImage.exe 포커스가있을 F12 가압 사용자
이 또한있을 수있다.
출력 창이 더 많은 진단 정보를 가지고있을 수 있습니다.
포인터를 생성자에서 NULL로 설정하고 필요할 때 할당합니다 (새 것으로). 포인터가 유효하지만 힙 (dbgheap.c의 영역 분리)에있는 것은 아닙니다.
일단 메모리를 할당하면 어떤 포인터 마법도 사용하지 않습니다. 이 경우 이미지를 반복하고 통계를 수집합니다. 그런 다음이 메모리에 저장된 통계를 사용하여 내 이미지로 다시 그려지지만, 다시 한번 말하지만 무언가 다른 방식으로이 메모리를 사용합니다.
새로운 구조체 배열을 만드는 것이 합법적입니까? 아닙니다.
Doh !!! 나중에 시간을 낭비해서 죄송합니다. 나는 안으로 파고 들어가고 나의 창조 및 파괴가 잘다는 것을 발견했다, 그러나 어딘가에 나는 mBoundingBox[X]
의 가치를 설정했다. X가 어디에서 밝혀 졌는지는 어쨌든 생성 된 배열의 희미 함입니다. 일반적인 사용자 오류입니다. 버그가 표시되는 놀라운 곳입니다.
문제가 무엇인지 확인하는 데 더 많은 코드가 필요합니다. – DrYap
mBoundingBox * mboundingbox = 새 boundingBox [mBlobCnt]; 이러면 안돼? –
@AliKazmi 아니요 올바르지 않습니다. 'mBoundingBox *'는 포인터 유형이 아닙니다.'boundingBox * '는 유형입니다. 'mBoundingBox'는 멤버 변수의 이름입니다. – CoryKramer