test를 메모리 할당 해제하고싶은데 이렇게 하면 해제가 되는거야??
printf로 출력하니까 5가 여전히 나오던데 해제되면 안나와야 정상 아니야?
해제가 애초에 안됐는데요?
그럼 해제시킬라면 어떻게 해야해??
해제랑 메모리 삭제랑 다름.
딜리트 노드가 있구나
미련이 남아서 성불하지 못함
free 했을때 heap 영역의 원본 보존일지 원본 훼손일지는 UB 임. 하지만 대개의 경우 쓸데없는 짓은 안하는 원칙이기 땜에, 아주 간혹 앞부분이 깨지는 경우도 있지만 보존되게 됨 ( 다른 동적 할당이 행해지지 않은 이상 )
즉, 함수에서 리턴한다고 스택을 0으로 청소하는게 아니고,
스택 포인터만 끌어내리는데다,
힙을 삭제한다고 힙을 0으로 청소하는게 아님.
그냥 재할당 가능한 상태로 두는 것.
어차피 덮어 쓸거면 0으로 지우는게 낭비잖아?
그냥 시스템마다 다르게 해석되는걸로 보면 되는건가요?
모든 프로그램에서 꼭 0으로 다시 시작한단 보장도 없으니까 말야.
해제된 메모리는 참조하지 않는게 정상.
넴. 저거 돌아가면 안될거같은데 돌아간다길래 ..
코세님 말이 맞아요. 스택은 항상 사용하다 남은 값으로 차있거든요. free를 한다고 해서 스택의 값이 전부 0이 되는 게 아니구 스택 포인터의 위치만 조절해 주는 거에요. - PUSH EBP
자료구조 시간에 짜는 delete node는 저렇게만 하면 맞은 거에요 - PUSH EBP
아직 data의 값이 남아 있기는 한데, 언제든 다른 코드에 의해서 덮어씌워질 수 있는 무방비한 상태랄까요 - PUSH EBP
앗 스택이 아니고 메모리라고 표현하는게 이해가 더 쉬울까요? - PUSH EBP
해제가 애초에 안됐는데요?
그럼 해제시킬라면 어떻게 해야해??
해제랑 메모리 삭제랑 다름.
딜리트 노드가 있구나
미련이 남아서 성불하지 못함
free 했을때 heap 영역의 원본 보존일지 원본 훼손일지는 UB 임. 하지만 대개의 경우 쓸데없는 짓은 안하는 원칙이기 땜에, 아주 간혹 앞부분이 깨지는 경우도 있지만 보존되게 됨 ( 다른 동적 할당이 행해지지 않은 이상 )
즉, 함수에서 리턴한다고 스택을 0으로 청소하는게 아니고,
스택 포인터만 끌어내리는데다,
힙을 삭제한다고 힙을 0으로 청소하는게 아님.
그냥 재할당 가능한 상태로 두는 것.
어차피 덮어 쓸거면 0으로 지우는게 낭비잖아?
그냥 시스템마다 다르게 해석되는걸로 보면 되는건가요?
모든 프로그램에서 꼭 0으로 다시 시작한단 보장도 없으니까 말야.
해제된 메모리는 참조하지 않는게 정상.
넴. 저거 돌아가면 안될거같은데 돌아간다길래 ..
코세님 말이 맞아요. 스택은 항상 사용하다 남은 값으로 차있거든요. free를 한다고 해서 스택의 값이 전부 0이 되는 게 아니구 스택 포인터의 위치만 조절해 주는 거에요. - PUSH EBP
자료구조 시간에 짜는 delete node는 저렇게만 하면 맞은 거에요 - PUSH EBP
아직 data의 값이 남아 있기는 한데, 언제든 다른 코드에 의해서 덮어씌워질 수 있는 무방비한 상태랄까요 - PUSH EBP
앗 스택이 아니고 메모리라고 표현하는게 이해가 더 쉬울까요? - PUSH EBP