ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자료구조] 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

    댓글