포인터 다시 질문드립니다.

ch0nn0m의 이미지

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;
}

klara의 이미지

뭐를 알고 싶으신건지 모르겠네요.
할당되지 않은 메모리를 참조하는 것은 정의되지 않은 동작입니다.

ihavnoth의 이미지

*a의 주소값을 출력하실려면 a를 사용하세요

심심할때 valgrind도 써보시고 왜 에러를 출력하는지 생각해보세요

$ valgrind --leak-check=full --show-reachable=yes ./a.out

없음

mithrandir의 이미지

a와 t의 포인터 값이 같기 때문에 가리키는 대상 주소도 같습니다.
free()는 포인터값이 담긴 변수가 아니라, 포인터가 가리키는 대상 주소에 대한 메모리를 해제하기 때문에,
free(a); 는 free(t); 와 동일하게 됩니다.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net