본문 바로가기

Programming/C

C 언어 | malloc과 포인터

학습 목표

포인터의 개념과 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