나는 심지어 head_new 노드를 확보 한 후 목록에이 특정 기능에서 제공되는 주요 기능의 값을 사용하여 동적으로free()를 적용한 후의 노드 값?
typedef struct list{
int data;
struct list * link;
} list;
list * head = NULL;
void release(list * head_new){
list * dummy = NULL;
while(head_new != NULL){
dummy = head_new->link;
printf("before freeing %p, %d", head_new->link, head_new->data);
free(head_new);
printf("free returns %p, %d", head_new->link, head_new->data);
head_new = dummy
}
}
할당 된 메모리를 해제하는 간단한 함수를 작성하려고했다, 일부 값은
인쇄1
12
1
123
1 12 1 123 before freeing 00622A40, 1
free returns 006200C4, 6433408
before freeing 00622A60, 12
free returns 006200C4, 6434048
before freeing 00622A70, 1
free returns 006200C4, 6433344
before freeing 00000000, 123
free returns 00000000, 123
마지막 두 줄은 같은 값의 데이터를 반환합니다. 심지어 큰 목록으로 시도했습니다. 같은 일이 일어난다! 마지막으로 2,3 개의 값 (즉, head_new-> data)이 그대로 반환됩니다. 내 질문 : 이것은 일종의 버그입니까? 또는 그러한 값을 갖는 것이 정상입니까? 반환 유형이 공짜가 아니기 때문에이 점에 관심이 있습니다. 그런 다음 어떻게 동일한 값을 표시 할 수 있습니까? 의심의 여지가 없도록 도와주세요.
오 .. 그런데 처음 2-3 개의 값이 변경되는 이유는 무엇입니까? 그리고 head_new를 해제 한 후, 어디에서 가리 킵니까? 바로 다음 문장에서 유효성 검사를 정당화 할 수 있습니까? head_new = dummy; – Hemant