2012-04-26 2 views
-1

C++/cli finalizer에서 관리되지 않는 클래스의 메모리를 정리하려고했지만 AcessViolation 오류가 발생했습니다. 나는 다음과 같은 것을한다.finalizer에서 관리되지 않는 메모리에 대한 액세스 위반이 발생했습니다.

MyClass::!MyClass() 
{ 

    if(_unmanaged) 
    { 
    _unmanaged->Delete(); 
    _unmanaged = 0; 
    } 
} 

아무도 모른다. 문제는 무엇인가? 답변 주셔서 감사합니다.

+0

'_unmanaged-> Delete()'의 기능은 무엇입니까? – Nick

+0

_unmanaged, 내 경우에는 vtk 클래스, 삭제 - vtk 개체 정리 절차. 어쨌든 그것은 관리되지 않는 클래스의 또 다른 방법 일 수 있습니다. –

+0

'_unmanaged'를 왜 0으로 설정하는지 모르겠습니다. – Nick

답변

0

좋아, 나는 하나의 추측을 가지고있다.

Finalizer는 자체 스레드에서 작동하므로 수동으로 개체를 처리하려고하면 경쟁 조건이 발생할 수 있습니다.

"이미 삭제 된 개체"에 대한 귀하의 의견을 보았지만 다시 한번 확인하겠습니다.

MyClass::~MyClass() 
{ 
    this->!MyClass(); 

    GC::KeepAlive(this); 
} 
+0

finalizer는 자체 스레드에서 작동하지만 Dispose를 호출하는 데 필요한 객체에 대한 참조가 있으면 가비지 수집기가 해당 객체에 손을 대지 않습니다. –

관련 문제