|
안녕하세요...
음... 밑에서 많은 분들이 답변을 하셨는데... 전... 같이 공부하는 입장에서 조금만 더 덧붙이도록 합니다...
free() 와 delete 는 조금 다른데, free() 의 경우는 C 에서 비롯된 하나의 함수이고, delete 는 C++ 에서 추가된 연산자 입니다. 근본적인 차이는 new 와 delete 는 객체와 같이 작업한다는 점입니다. malloc()이나 free()는 객체에 대해서는 전혀 모르죠...
그래서, new 와 delete 는 메모리를 할당하고, 해제하는 역할 외에 또다른 역할이 있습니다. 그것은 각각 해당 객체의 생성자와 소멸자를 호출하는 것입니다. new 로 할당한 객체는 new 에 의해 생성자가 실행되고, delete 에 의해 소멸자가 실행됩니다.
실제로 int, char 포인터의 메모리를 할당하는 경우, malloc() ~ free()를 써도 되고, new ~ delete를 써도 되지만, 우리가 만들어준 하나의 클래스형에 대해서는 new ~ delete 를 쓸 수 밖에 없습니다. 클래스형의 메모리를 할당할 때, malloc()을 사용하는 경우를 본 일이 있습니까? 그러니 malloc() ~ free()는 대부분의 C++ 책에서 쓰지말라는 식으로 나옵니다.
다른 부분에 대한 내용은... 특별히 드릴 말씀은 없군요...
다만... 서브폼에서 메모리 할당, 해제에 문제가 있는데, 메인폼에서도 영향을 받는다는 것은... (실제로 서브폼 안에서만 사용한 포인터 변수일 때, 메모리 해제를 안 해줘도 메모리가 크지 않으면 큰 문제가 없거든요...) 아마도 서브폼과 메인폼을 오가는 포인터 변수가 있지 않을까 생각이 되는데요...
그러니까.. 메인폼에서 할당된 포인터 변수를 서브폼에 전달해서 사용하는 것이 아닌가요...? 만약, 메인폼에서 할당된 포인터 변수를 서브폼에 인자로 전달했는데, 서브폼 안에서 메모리를 해제해 버립니다... 그런 후에 메인폼에서 인자로 넘겨준 포인터 변수를 또다시 메모리를 해제 하려 한다든가... (이러면 안되죠...)
서브폼에서 지역 변수로 만들어준 포인터 변수를 리턴값으로 넘겨주려 한다든가... 뭐... 에궁... 한계점입니다... 열심히 하시기 바랍니다...^^
그럼... 즐넷하세요...
Jun 님이 쓰신 글 :
: 안녕하세요...
: 메모리 문제때문에 많이 힘들어하고 있습니다.
:
: 메모리해제에 대해서 궁금한데요..
:
: 1.
: TControl이나 TRec형같은 것으로 잡은 것은 메모리 해제를 해주어야 하는지요..
: 가령 TRec *rec라고 선언을 해주었을 때 이런 경우도 메모리 해제를 해주어야 하나요?
: 해주어야 한다면 어떤 식으로 해주어야 하는 건지 알고 싶습니다...
:
: 2.
: 그리고 한 프로젝트 내에서 서브폼에 메모리가 꼬여있으면 메인폼에도 영향을 주는 건가요?
:
: 3.
: free(변수명), delete(변수명)의 차이점을 알고 싶습니다.
:
: 메모리가 꼬였을 때의 충고 부탁드리겠습니다.
:
:
:
|