카테고리 없음

c++ malloc으로 할당한 메모리를 delete로 해도 되는가?

정체불명의 모모 2024. 5. 29. 21:03

이것저것 찾아보며 공부 하던 중 한 포스팅이 눈에 띄어 그 내용 바탕으로 정리 하였습니다.

제가 보기 위한 목적으로 작성 하였으며, 틀린 부분이 있을 수도 있습니다.


 

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