1-1. malloc() 이해

문제 설명

다음 코드에서 malloc()이 하는 역할을 설명하시오.

 

코드

int *ptr;

ptr = (int*)malloc(sizeof(int));
 

 

요구사항

  1. malloc()의 역할을 설명하시오.
  2. 2개의 메모리 공간이 어느 영역에 어떻게 생성되는지 설명하시오.

예상답안

더보기
1. 프로그램 실행 중 필요한 메모리를 생성한다.
 
2.
- 1번라인은 stack 영역에 int *형 변수 공간 생성
- 3번라인은 heap 영역에 int형 (4byte) 정수 1개의 공간 생성
- ptr이 heap영역에 생성된 메모리의 시작 주소를 저장한다. 

 

1-2. 생성된 동적메모리 접근하기

 

문제 설명

다음 코드 실행 후 메모리의 값을 설명하시오.

 

코드

int *ptr;

ptr = (int*)malloc(sizeof(int));

*ptr = 100;
 

요구사항

  1. ptr 변수에는 무엇이 저장되는가?
  2. *ptr에는 무엇이 저장되는가?
  3. 값 100은 어느 메모리 영역에 저장되는가?

예상답안

더보기

1. 3번 라인에서 할당받은 heap 영역의 메모리 주소

2.  100

3. 3번 라인에서 할당받은 heap 영역의 메모리 주소

 

1-3. free()

문제 설명

다음 코드에서 free()의 역할을 설명하시오.

 

코드

free(ptr);
 

 

요구사항

  1. free()가 하는 일을 설명하시오.
  2. ptr 변수도 같이 없어지는가? (O / X)
  3. free() 후 ptr=NULL;을 사용하는 이유를 설명하시오.

예상답안

더보기

1. free(ptr) -> ptr이 가리키고 있는  malloc()으로 점유했던 heap 메모리 공간을 해제 한다. 

2. ptr변수는 stack에 int* 형으로 생성된 변수로 heap영역의 메모리 공간 해제와 상관없다. 

3. ptr은 여전히 예전 주소를 가지고 있으나 해제된 메모리 공간에 접근하지 않도록  NULL값으로 초기화 해준다.  

 

1-4. 배열과 malloc()의 비교

문제 설명

다음 두 코드의 메모리 할당을 설명하시오. 

 

코드

int arr[10];
 

int *arr;

arr=(int*)malloc(sizeof(int)*10);
 

요구사항

  1. 1번 코드의 arr이 가리키는 메모리 영역과 2번 코드 arr이 가리키는 메모리 영역을 설명하시오. 
  2. 1번코드의 메모리 공간의 크기가 계산되는 시점과 2번코드의 메모리 공간의 크기가 계산되는 시점을 설명하시오.

예산 답안

더보기

1. 1번 코드의 arr은 stack 영역에 생성된 int형, 크기10개의 배열의 첫번째 요소의 주소와 같고,  
     2번 코드의 arr은 heap 영역에 생성된 int형 4byte *10 (40byte) 의 크기의 메모리 영역의 시작주소를 가리킨다. 

 

2. 1번 코드는 int 크기와 배열 10의 크기를 컴파일 시점에 알고 있어서 40byte의 크기를 컴파일 시점에 알 수 있고, 
    2번 코드는 malloc() 이 실행되는 시점에 메모리 크기가 계산되고 할당이 되어 실행시점에 메모리 크기40byte를 알 수 있다. 

 

1-5. 메모리 해제 후 메모리 접근

 

문제 설명

다음 코드의 실행 결과를 예측하시오.

 

코드

int *ptr;

ptr=(int*)malloc(sizeof(int));

*ptr=50;

free(ptr);

printf("%d",*ptr);
 

요구사항

  1. 코드의 오류부분을 찾고 왜 그런지 설명하시오.
  2. 이 포인터를 무엇이라고 부르는지 작성하시오.

힌트

free 이후 메모리 접근

 

예상답안
더보기
1. 9번 라인에 해제한 메모리의 값을 출력하고 있다. 
 
2. Dangling Pointer (댕글링 포인터) - 해제된 메모리를 가리키는 포인터
 
 

+ Recent posts