PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/12/25 18:11:36
Name 김복만
Subject C++ 프로그래밍에 대해 여쭙니다.
안녕하세요. 크리스마스에 플젝으로 허덕이는 불쌍한 중생입니다..

동적할당된 메모리 해제에 대해 궁금한 것이 있습니다.
함수 내에서 동적할당(new)으로 변수를 선언하고, 이를 함수의 return으로 넘겨주었다고 하면
이에 대한 메모리 해제가 어디선가 이루어지나요?
해제가 안되고 있는 것이라면, 이를 해제할 수 있는 방법이 있나요? (return 전에 해제해버리면 안되니까요..)

약간 바꾸어 말하면...
함수를 사용하는 곳에서.. return 값을 저장할 변수 역시 동적할당으로 잡아놓고, 이 부분은 delete을 해주고 있는데,
이 것으로 메모리 해제가 모두 이루어진 것인지 모르겠습니다.

고수님들 답변 부탁드립니다. 꾸벅..

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
09/12/25 18:15
수정 아이콘
해제 안 됩니다. 한 가지 방법이 어떤 객체에 동적할당한 주소를 갖고 있게 하고, 소멸자가 불릴 때 동적할당을 해제해주는 식이죠.

수정 : 해제 안 된다는 것은 질문을 잘못 읽고 쓴 답이네요... 스스로 해제가 이뤄지지는 않습니다. 어디선가 직접 해제해줘야죠. 그래서 마지막 질문에 대한 답은 해제 됩니다 (...)
Cazellnu
09/12/25 18:15
수정 아이콘
다이나믹 얼로케이션된 메모리는 포인터로 넘기죠.
그리고 그 포인터를 이용해서 딜리트를 하면 해제되는것이구요.
포인팅된곳을 보고 찾아가서 해제를 하니까 당연히 한군데서만 해 주면 되는것입니다.
주의 해야될 것은 해제된 포인터를 가지고 다시 참조하려한다면 세그먼트 폴트가 나겠지요.

결과적으로 포인터를 가지고 한다면 두번째 대답이 맞습니다.
NULL Pointer
09/12/25 18:15
수정 아이콘
return 값을 저장할 변수는 굳이 동적할당 하실 필요는 없고요. return값을 받으신뒤 다 쓰신 다음에 delete 해주시면 됩니다.

char* AllocBuf()

return new char;


int main(void)

char* p = AllocBuf();

....

delete p;


요런식으로 쓰시면 됩니다.
WizardMo진종
09/12/25 18:21
수정 아이콘
할당된 메모리는 자동으로 해제가 안됩니다.
김복만
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 18:56
수정 아이콘
char *p를 선언하면서 만들어진 메모리는 해제가 되지 않습니다.
김복만
09/12/25 19:11
수정 아이콘
p를 선언하면서 어딘가에 메모리를 잡아놓고..
정작 할당할 때는 함수 return에서 오는 메모리의 포인터를 받는 바람에
쓸 수도, 해제할 수도 없는 메모리가 되는건가 보군요. 주의해야겠네요.
감사드립니다!
뱃살토스
09/12/25 22:07
수정 아이콘
아. 모처럼 질문에 답할 만한게 왔는데, 많은 분들이 선수를 치셨군요!
아쉬워서 한마디 남겨놓고 가자면,
heap으로 선언한 변수들은 조심해서 관리 해야 합니다.
C++익히시면서, 변수 할당한 곳과 삭제하는 부분이 점점 다른 곳에 위치하게 되는 경우가 많게 될 것인데요.
조심스럽게 추적하지 않으면, 비주얼씨에서는
detected memory leak! 머 이런류 메시지 자주 보시게 될겁니다.
고스트가 유도한 핵 빨간점 찾듯이 잘 찾으셔야 할듯^^
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
70718 오늘 이영호대 이제동 경기 보려구하는데요! [6] 너만을사랑해2055 09/12/25 2055
70717 아메리칸아이돌 구할 수 있는 곳 있나요? [4] DavidCoverdale1851 09/12/25 1851
70716 테저전에서 신단장의능선2.1이 단장의능선1.2보다 첫 오버 잡기가 쉽나요? [5] 2060 09/12/25 2060
70715 숄카라니트 허스키2153 09/12/25 2153
70714 유머게시판에 대해서!! [1] 인생은글쎄다2030 09/12/25 2030
70713 컴퓨터에서 게임시 잡음이 납니다;; [9] 이사무3313 09/12/25 3313
70711 예전에 PGR 유게에 캡쳐 사진이 올라왔었던 일본 멜로 영화(?) 제목 질문요! [2] 라이시륜2288 09/12/25 2288
70710 유학생 선물로 무엇이 좋을까요?? [1] 유재석과면상2499 09/12/25 2499
70709 내일 프로리그 보러 용산 가려고 하는데요 [3] GoGoSing2138 09/12/25 2138
70708 애플 타임캡슐 쓰다가 사망..ㅠㅠ 외장하드 1TB 짜리에 대한 질문입니다 [3] TRDD2123 09/12/25 2123
70707 영어문제 하나 질문드립니다 [5] Paloalto1822 09/12/25 1822
70706 김캐리 시즌1 bgm 이 무엇인가요...? [2] 휘련2248 09/12/25 2248
70705 C++ 프로그래밍에 대해 여쭙니다. [8] 김복만1698 09/12/25 1698
70704 스타크래프트 속도 조절 문제요 [3] 반니스텔루이3184 09/12/25 3184
70703 이별 선물 무엇을 줄까요? [1] Flocke2914 09/12/25 2914
70702 도미노피자 추천 부탁드립니다 [11] 타나토노트3998 09/12/25 3998
70701 주택청약을 넣으려고 하는데.. [3] 릴리러쉬1833 09/12/25 1833
70700 강력한 바퀴벌레약 추천해주세요. [5] 똥꼬털 3가닥처3168 09/12/25 3168
70699 어제 이어 또 노래 제목 질문. dangertnt1525 09/12/25 1525
70697 슬림핏 패딩 추천부탁드립니다. [1] 허느님맙소사2202 09/12/25 2202
70696 윈도우7관련 질문입니다. 동영상재생때 자주 멈춰버리네요 잠자는숲속의1681 09/12/25 1681
70695 인터넷 화면창 글자가 커졌어요; [7] 뒹굴뒹굴후니2958 09/12/25 2958
70694 컴퓨터가 고장났습니다 쫌 봐주세요 ㅠㅠ [1] 솔직한사람1530 09/12/25 1530
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로