:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
09/12/25 18:15
해제 안 됩니다. 한 가지 방법이 어떤 객체에 동적할당한 주소를 갖고 있게 하고, 소멸자가 불릴 때 동적할당을 해제해주는 식이죠.
수정 : 해제 안 된다는 것은 질문을 잘못 읽고 쓴 답이네요... 스스로 해제가 이뤄지지는 않습니다. 어디선가 직접 해제해줘야죠. 그래서 마지막 질문에 대한 답은 해제 됩니다 (...)
09/12/25 18:15
다이나믹 얼로케이션된 메모리는 포인터로 넘기죠.
그리고 그 포인터를 이용해서 딜리트를 하면 해제되는것이구요. 포인팅된곳을 보고 찾아가서 해제를 하니까 당연히 한군데서만 해 주면 되는것입니다. 주의 해야될 것은 해제된 포인터를 가지고 다시 참조하려한다면 세그먼트 폴트가 나겠지요. 결과적으로 포인터를 가지고 한다면 두번째 대답이 맞습니다.
09/12/25 18:15
return 값을 저장할 변수는 굳이 동적할당 하실 필요는 없고요. return값을 받으신뒤 다 쓰신 다음에 delete 해주시면 됩니다.
char* AllocBuf() return new char; int main(void) char* p = AllocBuf(); .... delete p; 요런식으로 쓰시면 됩니다.
09/12/25 18:38
모든 분들 감사합니다. NULL Pointer 님께서 말씀하신 방향으로 수정해야겠네요.
그래도 좀 확실하게 이해되지 않는 부분이 있어서 여쭤보는데요. 지금 제 코드 상태로 본다면 char* AllocBuf() return new char; int main(void) char* p = new char; p = AllocBuf(); .... delete p; 위와 같이 쓰고 있는 꼴인데, 동작에는 문제가 없는 것 같더군요. 여기서 delete p를 해주는 것으로 양쪽 모두 해제가 된다는 것인가요?
09/12/25 19:11
p를 선언하면서 어딘가에 메모리를 잡아놓고..
정작 할당할 때는 함수 return에서 오는 메모리의 포인터를 받는 바람에 쓸 수도, 해제할 수도 없는 메모리가 되는건가 보군요. 주의해야겠네요. 감사드립니다!
09/12/25 22:07
아. 모처럼 질문에 답할 만한게 왔는데, 많은 분들이 선수를 치셨군요!
아쉬워서 한마디 남겨놓고 가자면, heap으로 선언한 변수들은 조심해서 관리 해야 합니다. C++익히시면서, 변수 할당한 곳과 삭제하는 부분이 점점 다른 곳에 위치하게 되는 경우가 많게 될 것인데요. 조심스럽게 추적하지 않으면, 비주얼씨에서는 detected memory leak! 머 이런류 메시지 자주 보시게 될겁니다. 고스트가 유도한 핵 빨간점 찾듯이 잘 찾으셔야 할듯^^
|