-
[자료구조] malloc과 포인터 복습Stage/Computer Science 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으로 덮어써지게 된다.
'Stage > Computer Science' 카테고리의 다른 글
[자료구조] 연결리스트 : 도입 (0) 2021.06.01 [자료구조] 배열의 크기 조정 (0) 2021.06.01 [메모리] 파일 읽기 (0) 2021.06.01 [메모리] 파일 쓰기 (0) 2021.06.01 [메모리] 메모리 교환, 스택, 힙 (0) 2021.06.01