C++에서 new로 변수를 생성한뒤 delete하는것을 깜빡한다면?
글쓴이: noblepylon / 작성시간: 목, 2008/07/24 - 2:23오전
예로 들어서
void f()
{
string* str = new string; // str이라는 문자열을 생성한다.
*str = "Respect my authorita!"; // str에 대입
} // delete하는것을 잊었음.함수 f가 종료되면 포인터 str은 사라집니다.
문제가 되는 것은 str이 가리키고 있던 문자열인데,
문자열 내용이 영원히 메모리에 둥둥떠다니게 될까요?
그렇다면 정말 끔찍한데...
Forums:


네..전형적인 메모리
네..전형적인 메모리 릭이죠..
그래서 복잡한 경우에는 (delete 하기 힘든경우) 스마트 포인터를 쓰거나 합니다.
위와 같은 경우라면...
string을 함수 내부에서만 사용하신다면, 굳이 new를 이용해서 생성하실 필요는 없을 것 같은데요.
(string이 너무 길어서 stack이 부족하지 않는한...)
void f() { string str = "Respect my authorita!"; }요런식으로 바꿔보시면 어떨런지요?
저는 단지 new로 생성한 변수를 지우지 않으면 영원히 남아있는가 궁금해서요.
저는 단지 new로 생성한 변수를 지우지 않으면 영원히 남아있는가 궁금해서요.
사실 위의 경우는 new를 사용할 필요가 없습니다.
---
"The truth will make you free."(John 8:32)
"I am the way, and the truth, and the life: no one comes to the Father but through Me."(John 14:6)
---
“내게 능력주시는 자 안에서 내가 모든 것을 할 수 있느니라.”(빌립보서 4:13)
윗분 말씀대로 영원히 남습니다.
해당 프로세스가 종료하면, OS가 해제해 주긴 하지만,
프로세스가 살아있는 동안은 살아서 개발자를 괴롭히죠.. ㅠ.ㅠ
다 사용하셨다면, 반드시 delete를 해 주셔야 합니다.
저도 이 문제 때문에
저도 이 문제 때문에 요즘 골치인데, new로 할당하고 사용 후 함수 종료하기 전에 delete를 해버리면 Segmentation Fault가 납니다. -_-;;;
delete 하지 않으면 문제가 생길지 안생길지는 모르지만 일단 동작은 하고요.
그래서 그냥 스택 변수로 만들었는데, 역시 Segmentation Fault... -_-;;;
특이하게 이상한 클래스도 아닌데, 이런 문제가 계속 생기네요.
클래스 내부의 어떤
클래스 내부의 어떤 메소드에서 delete this를 하는 게 아닐까요? (추측추측)
--
임수서룬뫼 윤희수 {cppig1995/돼지군}
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
제가 비슷한 문제를 겪었었는데....
제가 겪었던 비슷한 문제는 할당을 했는데, 실제 데이터를 쓸때, 할당된 크기 보다 더 큰 데이터를 썼을때,
delete가 제대로 안됬었습니다. (에러 발생).
new로 할당하셨다면, 데이터를 넣지 않고 바로 delete를 했을때, 제대로 해제가 되는지 테스트 해 보심이 어떨런지요?
다행이네요
에러도 내주고... 잘 돌아가는 순간 악몽의 시작입니다.
포탈이는 불사신
-------------
포탈이는 불사신
댓글 달기