2013-08-23 3 views
0

C++ dll (비 관리 코드)을 사용하는 Windows Forms (C#) 응용 프로그램이 있습니다. 이미지가로드되면 dll 함수가 호출되어 처리됩니다. 문제는 다음과 같습니다. 예외 : dll에서 여러 번 함수를 호출하면 std :: bad_alloc이이 발생합니다. 아마도 문제는 dll에서 메모리를 삭제하지 않았기 때문이며 일 수도 있고 일 수 있습니다. Windows Forms의 가비지 콜렉터 때문입니다. 응용 프로그램에서 메모리 누수가 발생하는 프로젝트를 확인하는 방법은 무엇입니까?.NET과 C++ dll : 메모리 누수가 확실합니까?

+1

메모리 프로파일 러 또는 힙 디버거를 사용하십시오. 나는 먼저 관리되지 않는 것부터 시작하겠다. Umdh.exe에는 적절한 가격이 있습니다. –

답변

1

나는 비슷한 문제를 최근에 만나, 나는이 문제에 대한 유용한 해결책을 고안한다. ~ * 함수와 다른 "freeObject"라는 해체 함수를 작성할 수 있으며 "freeObject"함수를 명시 적으로 호출해야합니다. 다음은 그 예입니다.

void VideoAbstraction::freeObject(){ 
    videoCapture.~VideoCapture(); 
    videoWriter.~VideoWriter(); 
    backgroundImage.release();    
    currentStartIndex.release(); 
    currentEndIndex.release(); 
    mog.~BackgroundSubtractorMOG2(); 
    gFrame.release();   
    gForegroundMask.release(); 
    gBackgroundImg.release(); 
    currentMask.release(); 
    vector<ObjectCube>().swap(partToCompound); 
    vector<Mat>().swap(compoundResult); 
    vector<Mat>().swap(indexs); 
    vector<Mat>().swap(indexe); 
    vector<int>().swap(frame_start); 
    vector<int>().swap(frame_end); 
} 

이고 발신자 부분은 이와 유사합니다.

void UserVideoAbstraction::UserfreeObject(){ 
    userVB->freeObject(); 
}