2014-01-08 3 views
1

함수에서 변수를 선언 할 때 메모리를 사용하고 있습니다. 기능이 끝나면 메모리가 해제됩니까?함수 변수는 어디에 있습니까?

+1

"스택"에 대해 들어 본 적이 있습니까? - 당신은 기본 유형에 대해 이야기하고 있다고 생각합니다. 그렇지 않으면 힙을 사용할 수도 있습니다. 그리고 클래스가 올바른 소멸자를 제공하면 var가 범위를 벗어나면 메모리가 해제됩니다. 물론 새로 만든 인스턴스를 만들었습니다.이 경우 귀하의 의무입니다) – ShinTakezou

+0

그냥 가설을 세우지 마십시오. –

답변

6

모든 자동 스토리지 변수가 범위 밖으로 갈 때 해제, 당신은 동적으로 할당 된 것들에 대해 명시해야됩니다

void foo() 
{ 
    int x; 
    int* y = new int; 
    //You get a memory leak with each call to foo without the following line 
    delete y; 
} //x is freed here 
+1

동적 변수와 같은 것은 없습니다. 동적 * 객체 만 있습니다. 모든 변수의 범위가 지정됩니다. 그들의 이름과 같은 범위를가집니다. (그렇기 때문에 'y'는 범위를 벗어나고 모든 것이 잘됩니다.) –

+1

@KerrekSB이게 장난인가요? –

+0

@ScepticalJule : 아니요. 잘못된 대답을 고치려고합니다. –

1

아마도 가장 중요한 당신은 스택과 힙의 개념을 이해하다 그리고 주제에 아주 좋은 설명이 게시물 : 옆

What and where are the stack and heap?

영리함을 (auto_ptrs 등), 그것의 요점은 스택에 할당하는 경우 그 때 때 레아 해제된다는 것입니다 범위를 지정하십시오. 그렇지 않으면 직접 해방해야합니다. 위의 내용을 이해하면 찾는 대상을 더 잘 이해할 수 있습니다.

+0

"스택 및 힙"을 오해하여 자동 및 동적 저장 기간에 대해 읽어야합니다. –

+0

궤도의 @ Lightness Races - 내가 IMO를 쌓아 놓고 힙을 잘못 이해하지는 않았지만, C++ 용어로 그 용어로 설명 했어야한다는 것이 맞습니다. 결국 변수는 스택 또는 힙에만있을 수 있으며 스택이 풀리거나 할당 해제 함수를 호출 할 때 변수를 해제 할 수 있습니다. 나는 당신의 요점을 잡아! – RMo

+0

"개체"는 "변수"가 아니라 스택 또는 힙이 아닌 다른 개체에있을 수 있습니다. _That_ 포인트! :) –

관련 문제