본문 바로가기
2학년 2학기/c언어

13-8장 메모리 누수(2)_이미 해제된 동적 메모리 영역을 다시 해제 하려고하는 경우

by kkkkk1023 2024. 11. 26.
#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;
}