2014-04-14 3 views
2

다음 C 코드가 있습니다.무료 기능이 작동하지 않습니다.

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    while (1) { 
     int *test = malloc(sizeof(*test)); 
     test = 500; 
     free(test); 
    } 
    return 0; 
} 

할당 된 메모리가 몇 초 안에 2GB로 증가함에 따라 무료 기능이 작동하지 않는 것 같습니다. 문제가 무엇입니까?

답변

8

malloc의 포인터 인 free 포인터 만 가능합니다.

글자로 test = 500을 쓰면, test이 가리키는 메모리 위치가 변경되었습니다. 해방하는 것은 정의되지 않은 동작입니다.

할당 된 정수에 값을 할당하려면 derefence 그 값은 *test = 500입니다.

+0

아이스 커피하시기 바랍니다 다음과 같이 코드를 수정해야 – mah

5
test = 500; 

메모리 주소가 변경되었습니다. 그러므로 당신이 할당 한 원래 기억은 결코 풀려나지 않았다.

어쩌면 당신이 쓰는 의미 :

*test = 500; 
3

을 당신은 테스트 포인터를 덮어 쓰는 아닌 값은 테스트에 의해 지적했다. 1)

*test = 500; 

대신

test = 500;