[질문]특정포인터의 메모리 할당여부 체크..방법. free() 관련.
글쓴이: ㅡ,.ㅡ;; / 작성시간: 목, 2006/10/26 - 4:04오후
메모리 할당후 free() 로 해제 하는데
이때 특정 포인터의 메모리할당여부를 검사할방법이 있나요?
즉, a = malloc( 100 );
한후에 a 에 메모리가 할당되었는지를 체크할방법이 있는지...
mallinfo 에 포인터정보같은것이 들어있을줄알았는데 없더라구요.
==========================
질문이 좀모호하여 ..
함수로부터 return 되어온 변수 a 가 있는데 함수내부에서 여기에 메모리가 할당되었는지 안되었는지 알려고합니다.
Forums:
제가 잘못 이해한건지는 몰라도
malloc 함수가 성공하여 a 값에 NULL 이 아닌 주소값이 오면 성공한건데요..
변수 선언시 포인터 변수는 항상 NULL로 초기화를 해주시고
free()하신 후에도 항상 변수값에 NULL을 넣어주는 습관을 가지세요..
제가 보기엔 이거 질문한건 아닐것 같고 혹시 소스코드상에서 변수가 메모리 할당된 변수인지
확인할 방법을 찾고 계신건가요?
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
네.. malloc 가
네.. malloc 가 할당했는지가 아니고..
변수의 메모리주소가 할당된 번지인지 아닌지를 알고자 하는겁니다. 님이말씀하신 후자.
제가 다시 읽어보니 질문이 좀 오해하게 생겼네요..
----------------------------------------------------------------------------
흠..
어떤 목적으로 사용하실려는지 잘 모르겠지만
상당히 가변적일거 같기도 합니다. 선언시 초기화를 해주지 않으면
임의의 주소가 들어갈테구요. 중간에 수정을 가했을 경우 주소가 바뀔수도 있구요.
메크로나 구조체를 써서 표기하시는 방법은 어떨까요?
일단 가장 일반적인것은
1. 선언
2. 초기화
3. 할당
4. 해제
5. 초기화
이런 수순을 보통은 걷잖아요 ?
혹시 도움이 될까해서...
More Effective C++ 27번째 항목 "힙(Heap)에만 생성되거나 힙에는 만들어지지 않는 특수한 클래스를 만드는 방법"
을 보시면 비슷한 내용이 나와있습니다.
물론 C++ 에서 바라본건데 내용이 재미있으니 혹시 참고하셔도 괜찮을 것 같습니다.
제가 보기에는 C 언어 상에서 단지 포인터만 가지고 그것을 알아내는 방법은 없을 것 같은데 다른 고수분들이 혹시 알고 있을수동 있으니 확답을 하기가 어렵네요...^^
변수의 NULL 값 여부를 체크해서 아는 것이 가장 좋은 것이 아닐까 싶습니다.
혹시 방법 알게 되시면 꼭 답변 달아주세요.. 궁금해서...^^
/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/
저도 같은 고민을...
저 또한 질문자님과 같은 의문에서 검색하던도중 오게되었습니다.
저의 경우에는 기존의 소스코드를 편집하지 않고 수정을 하는 과정에서
a 변수가 함수A에 있는 realloc()에 의해서 free()되거나 되지 않는 경우를 확인해야 했습니다.
A함수 이후에 항상 a를 free()하는 코드였기 때문에 realloc에 의해서 free()되었다면 오류가 발생하는 경우였죠.
테스트 해본 바로는
a 변수가 free()되었다 하더라도 다른 프로세스가 그값을 덮치지 않는이상 기존값을 유지합니다.
a를 free()한 이후에도 a 변수명을 이용하여 메모리 공간의 수정이 가능하더라구요.
따라서 한번 사용한 후에는 a에 담긴 값으로는 구별이 안될것 같습니다.
저의 문제는 realloc 시에 기존의 주소를 저장하였다가 realloc후의 주소와 같다면 a변수를 free()해주고
만약 realloc후 주소가 달라졌다면 free()하지 않는 식으로 해결하였습니다.
댓글 달기