포인터 다시 질문드립니다.
글쓴이: ch0nn0m / 작성시간: 금, 2010/10/15 - 7:22오후
t=a;를 한후
t의 메모리를 해제 시켰습니다.
하지만 a의 값은 쓰레기 값이 되어버립니다
어떻게 된건지..??
#include<stdio.h> #include<stdlib.h> int main() { int *a; int *t; a=(int*)malloc(sizeof(int)); *a=20; printf("힙에 저장된 변수 a: %d\n",*a); printf("힙에 저장된 변수 &a: %d\n", &a); t=a; printf("힙에 저장된 변수 t: %d\n",*t); printf("힙에 저장된 변수 &t: %d\n", &t); free(t); printf("힙에 저장된 변수 a: %d\n",*a); return 0; }
Forums:
뭐를 알고
뭐를 알고 싶으신건지 모르겠네요.
할당되지 않은 메모리를 참조하는 것은 정의되지 않은 동작입니다.
&a, &t, 마지막 free후 *a는 보장되지 않습니다.
*a의 주소값을 출력하실려면 a를 사용하세요
심심할때 valgrind도 써보시고 왜 에러를 출력하는지 생각해보세요
$ valgrind --leak-check=full --show-reachable=yes ./a.out
없음
a와 t의 포인터 값이
a와 t의 포인터 값이 같기 때문에 가리키는 대상 주소도 같습니다.
free()는 포인터값이 담긴 변수가 아니라, 포인터가 가리키는 대상 주소에 대한 메모리를 해제하기 때문에,
free(a); 는 free(t); 와 동일하게 됩니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
댓글 달기