1 분 소요

❄️ David Malan 교수의 모두를 위한 컴퓨터 과학(CS50 2019)을 바탕으로 정리한 내용입니다.


아래와 같은 main 함수 코드가 있습니다. 여기서 문제가 될 만한 지점을 발견할 수 있나요?

int main(void)
{
  int *x;
  int *y;

  x = malloc(sizeof(int));

  *x = 42;
  *y = 13;
}

main 함수 안의 첫 두 줄에서는 포인터 x와 y를 선언합니다.
그리고 x에는 malloc 함수를 이용해서 int 자료형 크기에 해당하는 메모리를 할당합니다.

그 다음에는 x와 y 포인터가 가리키는 지점에 각각 42와 13을 저장합니다.
여기서 문제가 될 만한 부분은 *y = 13 입니다.
y는 포인터로만 선언되었을 뿐이지, 어디를 가리킬지에 대해서는 아직 정의가 되지 않았습니다.

따라서 초기화 되지 않은 *y는 프로그램 어딘가를 임의로 가리키고 있을 수도 있습니다.
따라서 그 곳에 13이라는 값을 저장하는 것이 오류를 발생시킬 수도 있는 것이죠.

아래 코드와 같이 y = x; 라는 코드를 더해주면, y는 x가 가리키는 곳과 동일한 곳을 가리키게 됩니다.
따라서 *y = 13; 으로 저장하면 x가 가리키는 곳에도 동일하게 13으로 저장될 것입니다.

int main(void)
{
  int *x;
  int *y;

  x = malloc(sizeof(int));

  *x = 42;
  y = x; // ✅ 추가
  *y = 13;
}

포인터를 초기화시키지 않고 값을 저장하면 어떤 오류가 발생할 수 있을까요?
포인터를 초기화시키지 않고 값을 저장하면 원하지 않는 주소에 값을 저장하게 되고, 해당 주소의 값을 바꾸게 됩니다.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: