char a[20]; void *b=a;
delete b;
했을 경우
메모리 누수가 생길까요?
리눅스에서 코딩해서 컴파일을 하는데
경고가 뜨네요 :?
new로 할당한 메모리만 delete 할 수 있습니다. 지금은 자동 변수로 선언된 배열을 delete 하는 것이므로 잘못된 프로그램입니다. 그리고 delete 하기 전에 void*로 변환하면 안됩니다. 소멸자가 호출되지 않으니까요.
할당되지 않은 메모리를 delete하게 되면 메모리 관리체계 자체가 붕괴됩니다. malloc/free 구현해 보신분은 왜 그런지 다들 아시겠죠.
Written By the Black Knight of Destruction
윗분들이 이야기 하신것처럼 적어주신 예제는 stack에 형성된 메모리를 삭제하려고 시도하므로 문제가 발생합니다.
그리고, 제목과 연관지어 이야기를 풀어보면..
ClassA* a = new ClassA; void* v = a; delete v;
를 했을 경우에는 문제가 발생할 수 있답니다. Class A가 destructor를 virtual로 갖고 있다면 말이죠... void*로 캐스팅하면서 vf_table이 날아가서 그렇습니다. -_-;;
(실제로 이것때문에 고생꽤나 했었던;;;)
Crow's Maniacal World.http://crowmania.cafe24.com
Let's be engineers!
char a[20]; void *b=a; delete b; 했을 경우 메모리 누수가 생길까요? 리눅스에서 코딩해서 컴파일을 하는데 경고가 뜨네요 :?
윗분들과도 다른 의미로도 문제가 생길 수 있습니다. void *를 delete 하게 되면, 소멸자가 불려지지 않습니다. 고운 하루되세요.
========================= CharSyam ^^ --- 고운 하루 =========================
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
new로 할당한 메모리만 delete 할 수 있습니다. 지금은 자동 변수
new로 할당한 메모리만 delete 할 수 있습니다. 지금은 자동 변수로 선언된
배열을 delete 하는 것이므로 잘못된 프로그램입니다. 그리고 delete 하기
전에 void*로 변환하면 안됩니다. 소멸자가 호출되지 않으니까요.
할당되지 않은 메모리를 delete하게 되면 메모리 관리체계 자체가붕
할당되지 않은 메모리를 delete하게 되면 메모리 관리체계 자체가
붕괴됩니다. malloc/free 구현해 보신분은 왜 그런지 다들 아시겠죠.
Written By the Black Knight of Destruction
윗분들이 이야기 하신것처럼 적어주신 예제는 stack에 형성된 메모리를
윗분들이 이야기 하신것처럼 적어주신 예제는 stack에 형성된 메모리를 삭제하려고 시도하므로 문제가 발생합니다.
그리고, 제목과 연관지어 이야기를 풀어보면..
를 했을 경우에는 문제가 발생할 수 있답니다.
Class A가 destructor를 virtual로 갖고 있다면 말이죠...
void*로 캐스팅하면서 vf_table이 날아가서 그렇습니다. -_-;;
(실제로 이것때문에 고생꽤나 했었던;;;)
Crow's Maniacal World.
http://crowmania.cafe24.com
Let's be engineers!
Re: void 포인터를 delete 했을경우, 문제가 되나요?
윗분들과도 다른 의미로도 문제가 생길 수 있습니다. void *를
delete 하게 되면, 소멸자가 불려지지 않습니다. 고운 하루되세요.
=========================
CharSyam ^^ --- 고운 하루
=========================
댓글 달기