2011-02-13 5 views
0

C에서 free()를 사용하면 하나의 포인터를 해제하고 포함 된 포인터를 해제합니까?free() 데이터 블록 C

포인터가 문자열과 다른 필드의 다른 배열을 보유하고있는 구조체의 배열을 가리키는 경우. 구조체 배열에 대한 포인터를 해제하면 모든 데이터가 해제되거나 이러한 다른 포인터가 손상되어 메모리를 도달 할 수 없게됩니까?

감사

답변

2

free 기능 블록이 해제되는 내에 포함 된 데이터를 전혀 알지 못한다. 해당 블록에있는 다른 데이터에 대한 포인터가있는 경우 을 해제해야 블록을 해제해야합니다. 전혀 해방하지 않으면 메모리 누출이 발생합니다. 나중에 해방한다면 힙 손상을 초래할 수 있습니다.

1

아니요. malloc/calloc에 ​​대한 해당 호출에 할당 된 메모리 만 해제합니다. 포함 된 포인터는 모든 무료 지식에 대해 포인터가 아닐 수도 있습니다. free는 전달 된 데이터의 구조를 알지 못합니다. 원시 메모리 주소 만 볼 수 있으므로 포인터가 들어 있는지 여부를 알 수 없습니다.

메모리 누수 여부를 확인하는 좋은 방법은 valgrind memcheck tool으로 프로그램을 테스트하는 것입니다. 그것은 자동으로 메모리 누수를 감지하는 도구가 있습니다.

+0

감사합니다. 최근 valgrind에 대해 uni에서 배웠습니다. 그 좋은 도구. – jarryd