2012-05-14 3 views
4

malloc을 사용하여 메모리를 할당하고 실행하는 동안 프로그램에서 예외/오류가 발생하여 프로그램에 수동으로 통합 된 exit(1) 문을 종료하면 C 컴파일러가 예기치 않게 종료하거나 수행하기 전에 메모리를 자동으로 해제합니다 프로그램의 exit(1) 줄 바로 전에 수동으로이 작업을 수행해야합니다.exit (1)이 발생하면 malloc의 메모리는 어떻게됩니까?

저는 Ubuntu 32bit 플랫폼에서 gcc-4.5.2 컴파일러를 사용합니다.

답변

10

exit으로 전화하면 OS는 할당 된 모든 메모리를 다시 사용합니다. 따라서 free 번으로 전화 할 필요가 없습니다.

편집 : 하지만 나중에 수정할 때 무료 전화를 간과 할 수 있으므로 일반적으로 프로그램에 할당 된 메모리를 해제하는 것이 좋습니다.

+1

와우, 빠르다 !!! – Abhinav

+0

'free()'를 호출 할 필요가 없으므로 근본적으로 좋지 않습니다. 확실히 권장해서는 안됩니다. –

+1

@Als 질문 : '종료하기 직전에 이것을 수동으로해야합니까?'그래서 'exit'를 호출하기 전에'free'를 호출하는 것은 확실히 불필요합니다. –

6

잘 설계된 운영 체제에서 프로세스가 exit(), die(), abort() 또는 raise()를 사용하거나 오류, 신호 또는 기타 다른 방법으로 종료되면 종료됩니다. 운영 체제는 스택 공간, 힙, 할당 된 메모리 (일반적으로 힙에 있음), 열린 파일 디스크립터 (* NIX 시스템 인 경우) 등을 포함하여 프로세스에서 사용하는 모든 리소스를 확보해야합니다.

그러나, 나는 '무료로 전화 할 필요가 없습니다.'라고하지 않을 것입니다. malloc()을 가지고있는 메모리를 명시 적으로 free()하지 않는다면 나쁜 프로그래밍/디자인 컨셉이다. 나중에 OS를 사용하여이 작업을 수행 할 수도 있지만 나중에 수정하면 메모리 누수가 발생할 수있다. 프로젝트를 종료하지 말고 사용 된 메모리를 비우는 것을 잊어 버리십시오.

+2

예, 엄밀히 말하면 '불필요한'것입니다. 그러나 누가 압니다. 내가 그것을 할 때 나는 심지어 나쁘다고 느낀다. : D –

+0

+1 * "나는 ''() '을 호출 할 필요가 없습니다.' '나쁜 프로그래밍/디자인 개념입니다. *' –

관련 문제