ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 댕글링 포인터 ( Dangling Pointer)
    Coding/Tip !! 2018. 9. 17. 18:28

    댕글링 포인터란..


    해제된 메모리 영역을 가리키고 있는 포인터를 의미다. 

    이러한 댕글링 포인터가 가리키고 있는 메모리는 더이상 유효하지 않음으로 Premature free란 의미인 

    너무 급한 해제 또는 조숙한 해제라고 하기도 한다.

    메모리 해제 한 뒤에 해제된 메모리에 접근하거나 함수 호출에서 자동변수를 가리키는 포인터를 반환하기에
    아래의 결과가 나타나게 된다.


    <예시>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    int main(){
        bool a = true;
        int *point;
        if(a){
            int dang=5;
            point = &dang;
        }
        //point는 댕글링 포인터가 된다. 이유는 괄호안의 dang이 괄호를 벗어나면서 지역변수임으로
        //할당된 스택영역이 제거되기 때문이다.
        return 0;
    }




    댕글링 포인터를 사용할 시, 발생하는 에러

    -> 메모리 접근 불가로 인한 Segmetation fault

    -> 보안적인 위험

    -> 메모리 접근 시에 예측이 불가능한 동작 발생

     


    댕글링 포인터 발생 예방

    -> 메모리 해제 후에는 포인터를 NULL로

    -> free 함수를 대체할 새로운 함수를 생성

    -> 몇몇 럼타임 시스템이나 디버깅 시스템은 해제된 메모리를 특별한 값으로 덮어쓴다.



    반응형

    'Coding > Tip !!' 카테고리의 다른 글

    static 변수  (0) 2018.09.18
    const 참조자  (0) 2018.09.17
    strcmp와 strncmp  (0) 2018.08.20
    C++ 클래스에서 다른클래스를 함수의 인자로 사용할 때  (0) 2018.04.14
    Syncronize 와 Unsyncronize  (0) 2018.04.10

    댓글

Designed by Tistory.