2021. 2. 26. 15:17ㆍProgramming/C
학습 목표
포인터의 개념과 malloc 함수의 용법을 잘 이해할 수 있다.
6주 차부터는 C로 구현할 수 있는 다양한 데이터 구조를 배운다. 데이터 구조를 정의하고 관리하기에 앞서 메모리와 포인터에 대한 개념을 정확히 이해해야 한다.
malloc과 포인터
지난 포스팅의 malloc 함수와 포인터를 복습하는 예제를 보자.
코드를 살펴보자.
- main 함수에서 먼저 포인터 x와 y를 선언한다.
- x에 malloc 함수를 이용해 int 자료형에 해당하는 메모리를 할당한다.
- x와 y 포인터가 가리키는 지점에 각각 정수를 저장한다.
코드에는 한 가지 오류가 있다. 프로그램을 실행시켜보자.
에러를 보면 포인터 y에 문제가 있음을 알 수 있다.
y는 포인터로 선언되었을 뿐이지 x처럼 메모리를 할당받지 못했다. 어디를 가리킬지 정의되지 않은 상태, 즉 초기화되지 않은 것이다.
문제를 해결해보자.
#include<stdlib.h>
#include<stdio.h>
int main(void){
int *x;
int *y;
x = malloc(sizeof(int));
y = x;
*y = 13;
printf("x: %i, y: %i\n", *x, *y);
}
문제를 해결하는데는 여러 방법이 있다. y에 메모리를 할당해주기만 하면 된다.
위 코드에서는 y를 x가 가리키는 곳과 동일한 곳을 가리키도록 했다.
따라서 *y = 13으로 저장하면 x와 y가 가리키는 곳 모두 동일하게 13이 저장된다.
생각해보기
포인터를 초기화시키지 않고 값을 저장하면 어떤 오류가 발생할까?
포인터가 임의의 주소를 가리키며 쓰레기 값을 가진다. 때문에 오류가 발생한다.
이 글은 네이버 부스트 코스 David J. Malan(데이비드 J. 말란) 교수님의 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 수강하고 작성한 글입니다. 본 강좌 내 실습에서는 CS50 Sandbox를 사용합니다.
모두를 위한 컴퓨터 과학 (CS50 2019)
부스트코스 무료 강의
www.boostcourse.org
'Programming > C' 카테고리의 다른 글
C 언어 | 배열의 크기 조정하기 (0) | 2021.02.26 |
---|---|
C 언어 | 파일 쓰기와 읽기 (0) | 2021.02.22 |
C 언어 | 메모리 교환, 스택, 힙 (0) | 2021.02.22 |
C 언어 | 메모리 할당과 해제 (0) | 2021.02.22 |
C 언어 | 문자열의 복사 (0) | 2021.02.20 |