정체불명의 모모
c++ malloc으로 할당한 메모리를 delete로 해도 되는가? 본문
이것저것 찾아보며 공부 하던 중 한 포스팅이 눈에 띄어 그 내용 바탕으로 정리 하였습니다.
제가 보기 위한 목적으로 작성 하였으며, 틀린 부분이 있을 수도 있습니다.
C Malloc으로 할당한 메모리를 Delete로 해제 해도 되는가?
: No! 그 이유는 malloc( ) 과 new 는 healp의 서로 다른 공간에 할당하기 때문이다.
malloc( )된 메모리에 delete를 사용하면 나올 수 있는 문제
- 메모리 누수(memory leaks)
: delete가 malloc( )으로 할당된 메모리 블록을 찾거나 해제할 수 없어서 메모리 자원을 낭비 할 수 있다. - 메모리 오염 ( memory corruption)
: delete가 non-object에 대해 소멸자를 호출하거나 유효하지 않은 포인터에 접근하여 crash나
데이터 유실이 발생할 수 있다. - 보안 취약점(security vulearabilities)
: delete가 일부 메모리에 예상할 수 없는 값을 덮어써서 코드 인젝션이나 권한 확대가 일어 날 수 있다.
- 코드 인젝션(code injection)
: 공격자가 악의 적인 코드를 사용자 입력 필드 애플리케이션에 주입하는 방법으로 공격 하는 것
이렇게 주입된 코드로 소프트웨어를 공격할 수도 있고 공격자의 권한을 확대하여 자신들이 원하는 데이터에
접근 권한을 가질 수도 있다.
결론
: 이러한 문제들을 겪지 않으려면 일치하는 쌍의 할당, 해제 함수를 사용 해야 한다.
malloc( ) | free( ) |
new | delete |
allocator | deallocator |
참고 사이트 :
https://23tae.github.io/posts/use-delete-on-malloced-memory/
[C++] malloc으로 할당한 메모리를 delete로 해제해도 될까?
개요
23tae.github.io
★ 굉장히 자세히 설명 되어 있는 사이트
https://dataonair.or.kr/db-tech-reference/d-lounge/technical-data/?mod=document&uid=235893
C++ 프로그래밍 : 동적 메모리 할당과 소멸자의 관계
C++ 프로그래밍 동적 메모리 할당과 소멸자의 관계 C/C++를 비롯해 자바 프로그래밍의 경우 필수적으로 동적 메모리 할당을 해야만 한다. 할당된 메모리를 처리할 때는 차이가 발생한다. 자바의
dataonair.or.kr
Comments