34.5 잘못된 포인터 사용

2233 단어 CC

값을 직접 저장

포인터는 메모리 주소를 저장하는 용도이므로 값을 직접 저장하면 안된다.

#include <stdio.h>

int main()
{
    int *numPtr = 0x100;    // 포인터에 0x100을 직접 저장

    printf("%d\n", *numPtr);    // 0x100은 잘못된 메모리 주소이므로 실행 에러

    return 0;
}

잘못된 주솟값을 저장하는 경우

int *numPtr = 0x100;
포인터에 직접 0x100을 저장했을 때, 메모리에서 0x100은 잘못된 주솟값이기 때문에 제대로 실행되지 않는다.

이 상태에서 numPtr을 역참조하여 메모리 주소에 접근하려 하면 에러가 발생한다. (⭐ 운영체제는 프로그램이 잘못된 메모리 주소에 접근했을 때 에러를 발생시킴)


실제 존재하는 메모리 주소는 직접 저장 하는 경우

실제로 존재하는 메모리 주소라면 포인터에 직접 저장할 수 있다.

보통 임베디드 시스템이나 마이크로 프로세서에서 제공하는 메모리 주소를 사용할 때 포인터에 직접 저장하기도 한다.

int *numPtr = 0x00CCFC2C;    // 실제로 존재하는 메모리 주소라면 저장할 수 있음


출처

https://dojang.io/mod/page/view.php?id=280

좋은 웹페이지 즐겨찾기