typedef struct tag{
char* str;
} A;
저 구조체를
A* b;
라고 선언하고, b구조체 포인터 변수안에는 문자열 저장할 str 있는데
str 에 문자열이 들어있다고 치고
그런데 메모리에서 완전히 구조체 포인터 변수b를 날릴려면
free(b->str);
free(b);
이렇게 해야 완전이 메모리에서 깨긋하게 되는건가요??
아니면
free(b); 이렇게만해두
그냥 싹다 지워져버리는건가요?
char* str;
} A;
저 구조체를
A* b;
라고 선언하고, b구조체 포인터 변수안에는 문자열 저장할 str 있는데
str 에 문자열이 들어있다고 치고
그런데 메모리에서 완전히 구조체 포인터 변수b를 날릴려면
free(b->str);
free(b);
이렇게 해야 완전이 메모리에서 깨긋하게 되는건가요??
아니면
free(b); 이렇게만해두
그냥 싹다 지워져버리는건가요?
전자.
할당을 해제하는거지 메모리가 지워지진 않는다고봄
밑에 썼다시피 할당한건 모두 해제해야함.
str에 문자열을 어떻게 넣었는데. 스택 변수를 박아 넣던지 힙을 떼다 넣었던지 할 거 아냐. 그거에 따라 다르지.
하지만 누군가 b->str이 들고 있는 주소를 같이 들고 있다면 문제는 더 복잡해지겠찌
아니.. malloc 해서.. strcpy 를 하든지 아니면 문자열 주소를 같다 넣던지 하고.. 그렇겟죠 b->str 주소를 딴놈이 같이 들고잇으면 당연 꼬이겟죠
근데 뭔가이상하다
괜히 GC를 쓰는 게 아니져
아니 그냥.. 복잡하게 생각하는게 아니라.. 일단 단순히 메모리에 할당한것들은 일일이 다 해제를 정확하게 해줘야되는거구나 이게 궁금햇음
정확히해줘야된다고 그게 C++의 단점임
C#으로 넘어오거나 자바를 하면 가비지컬렉터가 알아서 해주지
ㅁㄴㅇㄹ// 맞아요. 그러니까 제가 c++ 로 공부하고있는데 소스에 일일이 다나와잇길래 물어봣어욤