포인터에 대한 자세한 내용을 보려면 포인터를 생성하는 간단한 테스트 함수를 작성하고 쉘에서 일부 출력 후에 공간을 확보해야합니다.malloc의 간단한 테스트와 int 포인터로 free가 double free 또는 corruption 에러를 야기 함
void main() {
int *p = (int*) malloc(sizeof(int));
int a = 42;
printf("p: %x\n", p);
printf("*p: %d\n", *p);
printf("a: %s\n", a);
printf("&a: %x\n", &a);
p = &a;
printf("p: %x\n", p);
printf("*p: %x\n", *p);
//Until now everything works as expected
free(p); //ERROR
// printf("p: %x\n", p); // Shall cause error, because space was freed
// printf("*p: %x\n", *p); // Shall cause error, because space was freed
}
처음에는 모든 것이 정상적으로 실행되었습니다. free (p) 오류가 발생하지 않았습니다. 그럼 구조체와 동일한 테스트를 시도하고 이중 자유 오류가있어. "좋아, 어쩌면 내가 뭔가 잘못 했어. 시작하러 갈 수있어."나는 전에 생각했던 것보다 Ctrl + Z를이 모든 것으로 생각했다. 지금 나는 아직도이 오류를 얻는다. 왜? 그게 초보자 질문이야. 알아. 위의 코드는 malloc과 free의 간단한 데모로 웹의 모든 곳에서 찾을 수 있습니다. 여기처럼 : http://www.cplusplus.com/reference/cstdlib/free/ 희망, 누군가 내가 뭘 잘못했는지 말할 수 있습니다.
아를 (각각의 malloc은 힙에서 메모리에 당신에게 블록을 제공 기억) 할 수 있습니다 기억하십시오. 따라서 free는 스택에 있고 힙에는없는 공간을 할당 해제하려고 시도합니다. 게다가 원래 할당 된 공간은 여전히 존재하며 해제되지 않았으며 나는 그에게 가리킬 수 없습니다. 맞습니까? –
@PhantomasPhantom, 맞습니다. 할당으로 인해 메모리 누수가 발생합니다. – hmjd
그게 우리가 명시 적으로 배운 게 아니에요. 도와 줘서 고마워. 나는 이것을 몇 시간 동안 테스트 해왔다. 지금은 이해. –