메모리 누수에 관한 조언 요청...
글쓴이: nTachyon / 작성시간: 화, 2004/03/09 - 3:26오후
valgrind를 사용해 이리저리 로그를 봐도 이런 경우에 대한 해결 방법을 찾기가 힘드네요(노가다 외엔... :cry:)
[예제코드]
1 #include <stdio.h> 2 #include <string.h> 3 4 int main(int argc, char **argv) 5 { 6 char *p = NULL; 7 8 p = strdup(""); 9 printf("p : [%s]\n", p); 10 p = strdup("aaa"); 11 printf("p : [%s]\n", p); 12 free(p); 13 14 return(0); 15 }
위와 같은 코드가 있을 경우 valgrind를 통해 프로그램을 수행하면, 8번 라인에서의 malloc이 free 되지 않았다는 경고는 뜹니다.
그런데... 10번 라인처럼 이미 한번 malloc이 된 포인터에 또 다른 malloc을 했다는 경고는 뜨지 않네요.
제 경우엔 여러 파일로 나뉘어진 소스에서 위와 같은 상황을 잡고 싶은데... 메모리 해제하지 못했다는 경고만 가지고 추적하기엔 좀 크기가 큰 소스인지라... -_-;
혹 한번 malloc이 된 포인터에 또 다른 malloc을 했다는 경고를 주는... 이런 식의 디버깅이 가능한 툴을 아시는 것이 있다면 추천 부탁드리겠습니다.
좋은 하루 되세요~
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 2.31 MB |
Forums:
음....
unix에선 보통 lint를 사용하지만, 현재 재 리눅스에서 사용하는 것은
splint를 사용하고 있습니다. 님이 원하시는 정보를 모두 출력 해 줄
툴입니다.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
Re: 메모리 누수에 관한 조언 요청...
문제가 처음 strdup 된 메모리를 놓치는 것을 잡는것이 아니고, 유효한 pointer를 덮어 쓰는 것을 알아 내는 것인가요? 디버깅 툴로서는 최선을 다했다고 봅니다만...
유효한 포인터를 덮어 쓰는 것이 버그가 아닌 경우가 더 많을지도 모릅니다.
---
http://coolengineer.com
네 맞습니다 ^^
정말 디버깅 툴로서는 최선을 다 한 것이지요~ 처음 말씀드린 것 처럼 이런 건 논리적인 오류인지라, 노가다 외엔 찾을 방법이 없을까해서 조언을 부탁드린거고요...
splint에 대해 한번 사용법을 알아봐야겠습니다.
조언 주셔서 감사합니다^^
시시호일~ 오늘 하루도 좋은 하루~!!!
P.S 또 다른 조언을 기다려 보는건 욕심일까요? ㅎㅎㅎ ^^;
댓글 달기