구조체 s1의 배열 (힙 상)에 포인터 p1이 있다고 가정합니다. 각 구조체 s1에는 힙에있는 다른 구조체 s2에 대한 포인터도 있습니다. 크기를 조정하기 위해 p1에 realloc()을 호출하면 미리 할당 된 배열의 구조체가 보유하고있는 이전 메모리가 해제됩니까 (힙의 s2s)?realloc()은 오래된 메모리를 해제합니까? (오래된 메모리가 다른 메모리에 대한 포인터 일 때)?
문서에 if the area pointed to was moved, a free(ptr) is done
이라는 문구가 있기 때문에이 질문에 대한 대답은 하나의 레벨까지만 허용된다는 의미입니다. 그 맞습니까? 그리고 그렇다면 가장 좋은 해결책은 수동으로 새로운 배열을 malloc하고, 이전 배열을 반복하고, 새로운 큰 배열에 값을 복사하고, 구조체를 해제하는 것입니다.
'free()'는 포인터가 가리키는 객체의 종류를 알지 못합니다. 결과적으로, * 재귀 적으로 구조체의 포인터를 자동으로 free() 할 수 없습니다. – EOF
귀하의 질문은 일종의 수수께끼입니다. 블록을 *보다 크게 만들려고한다면 왜 더 작은 블록을 제외하고는 아무 것도 자유롭게해야합니까? 블록을 더 작게 만들려고하는 경우 질문에 의미가 있습니다. –
@DavidSchwartz 크기를 조정하기 위해 단어를 수정했습니다. 처음에는 확대 요소를 썼습니다. 이전 요소를 새 위치로 복사하면 이전 요소가 사라지지 않는 경우가있을 수 있다고 생각했기 때문입니다. 그러나, 되돌아 보면, 나는 이것이 사실 일 수 있다고 생각하지 않습니까? – gowrath