2011-12-21 3 views
1

내 응용 프로그램에서 메모리 누수 문제가 있습니다. 필자는 'Single'타입을 선언하기 위해 이전 구문으로 좁혔습니다. 선언이있는 테스트 응용 프로그램을 만들었으며 메모리를 많이 먹은 후에 충돌합니다. 내가 뭘 놓치고 있니?이전 구문을 사용한 .NET C++ 메모리 누출?

테스트 코드는 여기에 있습니다 :

#include "stdafx.h" 

using namespace System; 

int main() 
{ 
    while(1) 
    { 
     System::Single * sngTemp = new System::Single(0.0); 
     //System::String ^sngTemp = gcnew System::String(S"dsfasdfasdf"); 
    } 
    return 0; 
} 
+0

무엇이 질문입니까? 분명히 왜 코드가 충돌하는지 묻지 않습니다. 메모리를 할당하고 해제하지 않습니다. – delnan

+2

은 "왜 내가 gcnew를 사용할 때 가베지 컬렉션을 얻고, 새로 사용할 때가 아닌가?"라는 질문입니다. –

+0

delnan, 의도적으로 해제하지 않았습니다. 나는 GC가 할 것으로 기대하고있다 !! 내가 잘못? –

답변

5

이 "새 구문"문제 대에 "이전 구문"아니다 - 같은 행동을했을 C++/CLI. System::Single은 스택, 관리되지 않는 힙 또는 관리 힙에 할당 할 수있는 float의 별칭입니다.

여기

, 당신은 즉 같은 동일한 일을, 장식되지 않은 new, 당신은 관리되지 않는 힙에 하나를 할당하고 사용하고 있기 때문에 :

float* sngTemp = new float(0.0); 

일이 누출 기대하지 않을 것이다? 가비지 수집을 원하면 관리 할당
(이전 구문에서는 __gc new)을 사용하십시오. 또는 더 나은 아직 힙에 전혀 값 유형을 할당하지 않아도되므로 문제가되지 않습니다.

+0

감사합니다. 나는 그것을 깨끗이한다고 생각한다. 나는 System :: Single 같은 다른 것들처럼 System :: Single이 작동 할 것으로 기대하고 있었다. 내가 보는 차이점은 Single이 Structure와 String으로 클래스로 문서화되어 있다는 것입니다. 이것이 GCed인지 여부에 대한 단서 일 수 있습니다. 다시 감사합니다. –