나는 몇 가지 테스트를 실시, 내 질문에 대답하려면 :std :: exit leak 메모리를 종료 할 수 있습니까?
(복제 다음은 필요한 포함)
#include <cstdlib>
#include <memory>
내가
main
기능에
std::unique_ptr
로,
std::exit
라는 기능을했다.
void some_function()
{
std::exit(EXIT_SUCCESS);
}
int main()
{
std::unique_ptr<int> relying_on_raii{new int{5}};
}
나는 unique_ptr
선언 후 some_function
라고하면 메모리 누수가 있습니다.
1 potential leak(s) (suspected false positives)
[…]
6 unique, 6 total, 797 byte(s) of still-reachable allocation(s)
대로는 7 잠재적 누수가 발생한 두 번째 예에서 볼 수있는,
1 potential leak(s) (suspected false positives)
[…]
7 unique, 7 total, 801 byte(s) of still-reachable allocation(s)
되었다
두 로그 나는 다음 줄에 차이가 Dr. Memory에서 가져온 크기는 정확히 4 자이고, 정확히 int
의 크기입니다. 이 테스트를 두 번 반복하면 std::exit
테스트에서 실제로 805 byte(s)
이되는 것으로 나타났습니다.
안전한 사용 기능은 std::exit
이거나 항상 메모리 누수를 방지하기 위해 메인에서 돌아와야합니까?
'exit'를 호출하는 경우 여전히 누출이 주요 관심사입니까? 스택을 푸는 데 신경 쓰면. 'main' 만 잡을 수있는 예외를 던집니다. – StoryTeller
@StoryTeller 나는 std :: exit를 내 프로그램을 종료하는 일반적인 방법으로 사용하고 싶다. 왜냐하면 리턴 값을 3 번 호출해야하고, 재시작 여부를 bool 값으로 검사해야하기 때문에 std : : exit'. '던짐 '은 흥미로운 아이디어이지만 성공한 출구를 던질 수있는 해킹처럼 보입니다. – kim366
프로그램이 종료되면 누출 된 것이 무엇입니까? OS가 프로세스를 정리합니다. – NathanOliver