1) malloc과 포인터 복습
아래와 같은 main 함수 코드가 있습니다. 여기서 문제가 될 만한 지점을 발견할 수 있나요?
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
}
여기서 문제가 될 만한 부분은 *y = 13
입니다. y
는 포인터로만 선언되었을 뿐이지, 어디를 가리킬지에 대해서는 아직 정의가 되지 않았습니다.
따라서 초기화 되지 않은 *y
는 프로그램 어딘가를 임의로 가리키고 있을 수도 있습니다.
따라서 그 곳에 13이라는 값을 저장하는 것이 오류를 발생시킬 수도 있는 것이죠.
y = x;
*y = 13;
아래 코드와 같이 y = x;
라는 코드를 더해주면, y
는 x
가 가리키는 곳과 동일한 곳을 가리키게 됩니다.
따라서 *y = 13;
으로 저장하면 x
가 가리키는 곳에도 동일하게 13으로 저장될 것입니다.
생각해보기
포인터를 초기화시키지 않고 값을 저장하면 어떤 오류가 발생할 수 있을까요?
메모리 어딘가의 랜덤한 주소를 가지고 있기 때문에 참조하다간 오류가 발생합니다.
note
written by CaesiumY