안녕하세요 c 링크드 리스트관련 질문 드립니다.

qkdlsemf의 이미지


이게 struct선언부고요

typedef struct __stch{
	char chara;
	struct __stch *next;
	struct __stch *prev;
}stch;

이게 free해주는 부분입니다

while(TRUE){
		*(dest+i)=p->chara;
		if(p->next==head){
			*(dest+i+1)='\0';	
			break;
		}
		p=p->next;
		free(p->prev);
		i++;
	}

여기서 p는 스트럭쳐 포인터구요
p=p->next;
free(p->prev);
p에서 next로 넘어간다음에 그전에 있던 노드를 free해주고 싶어서 저렇게 썻는데 저런식으로 해주는게 맞나요?
테스트 해본다고 해봤는데 free가 안된거 같아서요 어떻게 해야 하나요?
검색으로 찾기가 힘드네요 ..ㅠㅠ