728x90
반응형
Dangling Pointer
Dangling Pointer는 직역하면 매달린 포인터입니다.
마치 전연인을 잊지 못하고 매달리는 누군가의 모습을 생각해보면 좋겠습니다.
이미 그 사람은 마음이 떴는데 말입니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *a = (int *)malloc(sizeof(int));
*a = 50;
int *b = a;
free(a);
*b = 50;
}
위 코드는 Dangling Pointer를 잘 보여주는 예시입니다.
a의 주소를 b가 가지고 있지만
free 해버린 주소에 b로 접근하여 새로운 값을 할당하려 하면 오류가 발생합니다.
이렇게 이미 free 함수를 통해 해제한 메모리에 대한 주소를 가지고있는 포인터를 Dangling Pointer라고 합니다.
Memory Leak
Memory Leak이란 직역하면 메모리 누수입니다.
힙 메모리에서 할당받은 공간들은 사용이 끝나면 free 함수를 통해 해제해주어야 합니다.
해제할 주소를 가지고 있으면 상관없지만, 해제하지 않은 상황에서 주소를 잃어버린다면
영영 그 메모리는 해제되지 않을 것입니다.
이럴경우, 해제되지 않은 메모리들이 계속 쌓여서
나중에는 사용할 공간이 없어지는 문제가 발생하게됩니다.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *a = (int *)malloc(sizeof(int));
int *b = (int *)malloc(sizeof(int));
*a = 50;
*b = 90;
a = b;
}
위 코드를 보면 힙 메모리로부터 할당한 값에 대한 주소를
int형 포인터 변수a에 저장하고 있었는데
a에 b가 가진 주소를 덮어씌우면서
해제해야하는 메모리에 대한 주소를 잃어버렸습니다.
따라서 Memory Leak이 일어나게 됩니다.
'언어 > C' 카테고리의 다른 글
[C언어] 배열 요소 접근과 포인터의 관계 (0) | 2022.06.15 |
---|---|
[C언어] 주소에 대한 swap 구현 (0) | 2022.06.13 |
[C언어] 함수 포인터 (0) | 2022.06.12 |