#include <stdio.h>
#include <stdlib.h>
int main(void) {
char * A;
char * B;
A = (char *)malloc(100*sizeof(char));
B = (char *)malloc(100*sizeof(char));
B = A;
free(A); // A는 해제 가능하다.
free(B); // 원래의 B는 해제 불가능할 뿐 아니라, 이미 해제한 A를 다시 해제하려 고 하고 있다 (double free)
return 0;
}
위의 사진처럼 B에 A를 할당을 하면 동적할당 받은 2000번지의 메모리 영역에는 접근할 수 없게 되고 free도 하지 못하게된다.
또한 A와 B를 free하면 같은 메모리 영역을 두번 free하는 것이기 때문에 오류가 발생한다. 따라서, 아래와 같이 코드를 변경해야한다.
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char *A;
char *B;
A = (char *)malloc(100 * sizeof(char));
B = (char *)malloc(100 * sizeof(char));
free(B); // B 메모리 해제
B = A;
free(A); // A 메모리 해제
return 0;
}
'2학년 2학기 > c언어' 카테고리의 다른 글
13-10장 Dangling pointer (0) | 2024.11.26 |
---|---|
13-9장 메모리 누수(3)_먼저 할당된 메모리 주소를 해제를 한 경우 (0) | 2024.11.26 |
13-7장 메모리 누수(1)_fread가 실패해서 free를 실행하지 못하는 경우 (0) | 2024.11.26 |
13-6장 동적 할당에서의 대표적인 오류들 (0) | 2024.11.25 |
13-5장 realloc(), memset(), calloc() (1) | 2024.11.25 |