티스토리 뷰
6. 메모리 할당과 해제
✔ malloc 함수를 이용하면 메모리 할당이 가능하다
✔ 할당된 메모리를 모두 사용한 후에는 반드시 free라는 함수를 사용해 메모리를 해제해주어야한다
✔ 그렇지 않으면 메모리에 저장한 값이 쓰레기 값으로 남아 메모리 용량의 낭비가 발생하기 때문
✔ 이러한 현상을 메모리 누수라고 한다
버퍼 오버플로우
할당받은 메모리를 초과하는 메모리를 사용하고자 할 때 발생하는 메모리 누수
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *x = malloc(10 * sizeof(int));
x[10] = 0; //버퍼 오버플로우 발생
free(x);
return 0;
}
✔ 배열 x 에는 정수형 값을 총 10개 저장할 수 있다.
✔ 배열의 index는 0부터 시작되므로, 배열 x 의 마지막 index는 9
✔ 즉, 할당된 총 40바이트(int 4byte * 10) 메모리를 초과해서 값을 저장하고자 했기때문에, 버퍼 오버플로우가 발생
[출처] 부스트코스 | 모두를 위한 컴퓨터 과학(CS50 2019)
'Computer Science > CS50' 카테고리의 다른 글
[CS50 5주차] 8-9. 파일 쓰기/파일 읽기 (0) | 2021.02.14 |
---|---|
[CS50 5주차] 7. 메모리 교환, 스택, 힙 (0) | 2021.02.14 |
[CS50 5주차] 3-5. 문자열 (0) | 2021.02.12 |
[CS50 5주차] 2. 포인터 (0) | 2021.02.12 |
[CS50 5주차] 1. 메모리 주소 (0) | 2021.02.12 |
댓글