2010-08-11 5 views
4

그래서, 나는이 C++ 책에서 볼 기본 텍스트 입력 기능의 맥락에서이 질문 : 그래서 온도가 80 개 문자의 배열을 선언포인터가 할당 된 메모리가 함수 뒤에는 있지만 배열에는없는 이유는 무엇입니까?

char *getString() 
{ 
    char temp[80]; 
    cin >> temp; 
    char * pn = new char[strlen(temp + 1)]; 
    strcpy(pn, temp); 
    return pn; 
} 

, 그 메모리 자동 변수는 getString() 한 번에 해제됩니다 보고. 어떤 이유로 든 temp을 반환했다면 함수가 끝나면 메모리가 해제되었으므로 함수 외부의 사용법은 신뢰할 수 없습니다. 그러나 같은 컨텍스트에서 pn을 선언하고 있기 때문에 메모리가 어떻게 삭제되지는 않습니까?

+3

그리고 코어 덤프없이 실행 되었습니까? strlen (temp) +1이 아닌 strlen (temp + 1)이어야한다고 생각합니까? – KedarX

답변

11

으로 선언 한 개체가 힙에 할당되고 temp과 같은 변수가 스택에 있으므로

함수가 반환되면 해당 스택 프레임은 할당이 해제되지만 힙은 영향을받지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 또한 더 구체적으로, pn (이 포인터의 주소 데이터를 보유하는 공간)에 할당 된 메모리는 버려지고, 이는 그 내용을 사용하기 위해 호출 함수에 반환되어야하는 이유입니다. pn이 가리키는 메모리는 동적으로 할당되었으며 여러분이 답한 것에 따라 작동합니다. – soula

관련 문제