널 포인터 역참조

1 개요[ | ]

널 포인터 역참조
Null Pointer Dereference. Null Dereference
  • 널 포인터에 어떤 값을 대입할 때 발생하는 에러
  • 많은 소프트웨어가 실행 도중 죽는 원인이 됨
  • C, C++, Java, .NET 등의 언어에서 발생 가능

2 예제[ | ]

코드
// test.c
#include <stdio.h>

int main()
{
    int *p = NULL; // NULL 값 대입

    *p = 1; // 널 포인터 역참조

    return 0;
}
실행
$ ./test.out
Segmentation fault (core dumped)
→ Segmentation fault 발생하며 프로그램 오류 발생

3 오류 발생[ | ]

  • malloc() 호출 시 메모리 부족으로 NULL 이 넘어갈 경우
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void getName(char **ppName);

int main()
{
    char *pName;
    getName(&pName);
    printf("%s", pName);
    return 0;
}

void getName(char **ppName)
{
    char name[256];
    fgets(name, sizeof(name), stdin);
    *ppName = (char *)malloc(strlen(name) * sizeof(char)); // 메모리 부족으로 NULL 값이 넘어갈 경우
    strcpy(*ppName, name); // 널 포인터 역참조 오류 발생 가능성 있음
}
→ *ppName 이 NULL 값으로 넘어오는 경우에 대한 예외 처리 필요

4 오류 발생 시[ | ]

윈도우
  • 0x00000000 주소를 참조 했다는 오류 메시지 발생

5 같이 보기[ | ]

6 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}