2009-06-18 4 views
3

좋아요, DLL 내에 내 보낸 클래스가 있습니다. 이 클래스에는 가져 오기 프로세스 내에서 대화 상자의 ComboBox에 사용되는 정적 문자열 목록이 있습니다. 이러한 문자열은 다음과 같이 선언되고 정의됩니다.DLL에서 내 보낸 정적 클래스 변수가 메모리 누수로 표시됩니다.

// In header: 
class MYDLL_API someClass { 
public: 
    static const string stringList[]; 
    static const int numString; 
}; 

// In .cpp 
const int someClass::numString = 3; 
const string someClass::stringList[numString] = { 
    "String 1", 
    "String 2", 
    "String 3" 
}; 

따라서 실제 내보내기는 정상적으로 작동합니다. 그러나, 나는 그래서 그들이 의미 한 콤보 박스에서 그 사용을 중단이 메모리 누수 누가 결정하기 위해

{129} normal block at 0x003D69F0, 32 bytes long. 
Data: <String 1> 

etc. 

로 나타났다 내 VS 2008 디버거 덤프 메모리를 발견하고 있는지 확인 누출은 여전히 ​​존재했다. 그래서 내 질문은, 거기에 몇 가지 문제가 어디에 메모리 누수로 간주됩니다 DLL에서 정적 클래스 변수를 수출과 관련이 있습니까?

답변

2

이것은 정적 변수가 범위를 벗어나고 dll이 언로드 될 때 발생하는 문제입니다 (mfc/crt).

this을 살펴보십시오 -보고있는 것과 거의 동일한 문제를 설명합니다.

제안 된 솔루션이 here이지만이 방법이 효과가 있는지 잘 모르겠습니다.

나는 과거에 이와 같은 문제가 있었으며, 나는 (깔끔하게)이 잘못된 긍정을 제거 할 수있는 유일한 방법은 이러한 통계를 shared_ptr로 정의하고 전역 "종료"방법으로이를 파괴하는 것입니다 .

관련 문제