Stage/Computer Science
[자료구조] malloc과 포인터 복습
kellykang
2021. 6. 1. 23:21
학습 목표
포인터의 개념과 malloc 함수의 용법을 잘 이해할 수 있다.
1. 오류 파악하기
아래 코드를 보고 문제가 될 만한 지점이 어디인지 찾아보자.
int main(void)
{
int *x;
int *y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
}
- malloc 함수는 할당하고 싶은 크기를 인자로 받는다.
- 의미를 바로 파악하지 못한 부분:
*x = 42
=x의 주소로 가서 42를 저장해라.
- 문제가 되는 부분은 *y = 13; 이 부분이다. 위 코드에서 x에는 메모리를 할당해줬는데, y에는 아무런 액션을 취한 것이 없다.
- y는 포인터로는 선언되었는데, 어디를 가리킬지에 대해서는 아직 정의가 되지 않았다.
- 초기화 되지 않은 *y는 프로그램 어딘가를 임의로 가리키고 있을 수 있는데, 그 곳에 13이라는 값을 저장하면 오류를 발생시킬 수가 있다.
- 포인터를 초기화하지 않으면 접근이 허용되지 않는 주소 또는 의도하지 않은 주소를 가리킬 수 있어 예상치 못한 오류가 발생할 수 있다. 그렇기 때문에 프로그래머가 원하는 방식으로 구동되지 않을 수 있다.
2. 오류 고치기
y = x;
*y = 13;
- y = x; 라는 코드를 넣어주면 y는 x가 가리키는 곳과 같은 곳을 가리키게 된다.
- *y = 13; 코드를 실행하게 되면 x가 가리키는 곳에 13으로 저장이 되기 때문에 42 -> 13으로 덮어써지게 된다.