2014-04-30 2 views
1

영어가 능숙하지 않지만, 내가 말하는 것을 이해하기를 바랍니다. :) 제 능력을 향상 시키려고합니다.프로그램을 종료하기 전에 객체가 삭제되지 않았 음

int main() 
{ 
    int x; 
    int* p = new int(); 

    cin >> x; // waitting for user enter a integer number 
    // BUT, what if the user force closes the program? 

    cout << "The instructions from this to the end are not going to be run!" << endl; 
    delete p; 
    //.. 

    return 0; 
} 

배치되지 않습니다 페이지 포인터에 의해 할당 된 메모리 :

좋아, 나는 몇 가지 코드를 아래와 같이했다.

이 문제에 대한 해결책이 있습니까?

감사합니다 :)

업데이트 : 는 메모리 누수인가?

+1

"강제 종료"의 의미를 정의 할 수 있습니까? – Angew

+0

OS가 자동으로 정리합니다. 어쨌든 프로세스가 종료 될 때 메모리를 정리하지 않기위한 최적화입니다. http://blogs.msdn.com/b/oldnewthing/archive/2012/01/05/10253268.aspx –

+0

"절대로 처리하지 않음"은 사실이 아닙니다. 운영 체제는 남아있는 모든 리소스를 정리합니다. –

답변

2

현대의 OS가를 관리하고

그것에 대해 걱정하지 마십시오 닫은 후 프로세스에 의해 할당 된 전체 메모리를 청소합니다. 프로그램이 실행 중일 때 메모리에 대해 걱정해야합니다.

코드가 실행 중일 때. 맨손으로 포인터를 사용하지 말고 포인터가 필요한 경우 스마트 포인터를 사용하십시오.

+0

나는 그것에 대해 생각할 것입니다 :) 감사. – dnvThai

+0

그래서 .. 메모리 누출인가요? – dnvThai

+0

예,하지만 코드가 즉시 닫히면 OS가 프로세스의 전체 메모리를 정리합니다. – deepmax

1

운영 체제가이를 처리합니다. 프로그램이 끝난 후 프로그램에서 할당 한 메모리 (소켓과 같은 다른 리소스)가 모두 해제됩니다.

1

SIGKILL 또는 그와 동등한 Windows는 정리가 수행되지 않고 프로그램을 닫습니다. OS는 파일 설명자/파일 핸들과 같은 메모리와 리소스를 회수합니다. 그것에 대해 할 수있는 일은 거의 없습니다. "하드 킬"신호는 자발적으로 종료되지 않는 프로그램의 마지막 수단으로 존재합니다.

다른 "소프트 킬"신호는 caught 일 수 있으며 적절히 처리 될 수 있습니다.

1

예를 들어 Windows를 사용하는 경우 콘솔 창을 닫으면 응용 프로그램이 강제 종료됩니다.

프로그램에서 할당 한 모든 메모리 및 OS 핸들은 OS 자체에서 해제되므로 걱정할 필요가 없습니다. 가능한 모든 응용 프로그램 종료에 대해 '보호'할 수는 없습니다.

정상적인 조건에서는 메모리가 누출되지 않는 프로그램을 만들어야하며, 예외를 사용하면 예외가 발생할 때 누출되지 않습니다.

관련 문제