2013-09-27 1 views
2

저는 C++의 초보 프로그래머입니다. 최근에 C++로 이미지 처리 작업을 시작했습니다. 나는 정의와 같은 간단한 기능을 사용하는 것을 시도하고있다 :RtlValidateHeap DLL에 잘못된 주소가 지정되었습니다.

Matrix MVE(Matrix R) 
{ 
    Matrix *X = P.T(); 
    invX = *X->Inverse(); 
    delete X; 
    return invX; 
} 

또는

Matrix MVE(Matrix R, double tolerance) 
{ 
    int n = R.Y(); 
    int m = R.X(); 
    Matrix X(n,m); 
for (int i = 0; i < n; ++i) 
     M[i][m] = tolerance * R[i][m-1]; 

    return M; 
} 

이 릴리스 모드에서 아무런 문제가 없지만, 내가 debbug 모드에서 실행할 때, 나는 다음과 같은 오류가 발생합니다 :

Windows가 plappd.exe에서 중단 점을 트리거했습니다. plappd.exe 또는로드 된 DLL에 버그가 있음을 나타내는 힙이 손상되었을 수 있습니다. plappd.exe가 포커스를 가지고있는 동안 사용자가 F12 키를 누르기 때문일 수도 있습니다.

다른 DLL 파일에서 Matrix 클래스의 생성자 및 연산을 호출하고 있습니다.

많은 포럼에서 제안 된 것처럼 디버그 다중 스레드 (/ MTd)에서 디버그 다중 스레드 DLL (/ MDd)로 변경해 보았지만 문제를 해결하는 데는 도움이되지 않았습니다.

제안 사항?

미리 감사드립니다.

답변

0

예를 들어 Walker Dependency와 같은 도구를 사용하여 exe와 dll이 동일한 런타임을 사용하는지 확인할 수 있습니까? (일반적으로 MSVCR ** DLL 확인) exe와 dll은 동일한 런타임을 사용해야합니다.

편집 : 는 모두 디버그 모드가 는 또한, 당신은 "디버그 다중 스레드 DLL (/ MDD)에 디버그 다중 스레드 (/ MTD)에서"변경했다입니다. 실행 시간이 릴리스 구성에서 제대로 작동하고있는 것 같습니다. 멀티 스레드 (/ MT) 또는 멀티 스레드 DLL (/ MD)이어야합니다.

+1

멀티 - 스레드 모드의 DLL (/ MD)을 릴리스 모드로 실행하면 작동합니다. 반면, 다중 스레드 (/ MT) 및 다중 스레드 DLL (/ MD)은 디버그 모드에서 동일한 오류를 발생시킵니다. – user2811175