세그멘테이션 폴트를 줄이자! valgrind

아 몇일동안 한거 헛수고 했다 -_-;

아...

바로전에 포스팅한것도 괜한 삽질이 되어버린..

덕분에 mp3구조랑 비트연산같은거 다시보긴 했지만.... 아아.........;

계속 길을 둘러간다 -_-;

역시 id3lib 가 잘못된게  아니라 내가 잘못 만든거였다...
350     /*full path!*/
351     m_st.mpd_dirpath = "/home/lowid/data/mp3";
352
353     /*file path 합성*/
354     filepath = (char *)malloc(strlen(m_st.mpd_dirpath) + strlen(m_st.filename));
355     sprintf(filepath,"%s/%s",m_st.mpd_dirpath,m_st.filename);
356
357     /*printf("status : %d \nfilename: %s \nplaytime: %d \ntotaltime: %d\n",
358             m_st.status,m_st.filename,m_st.elasped_time,m_st.total_time);*/
359
360     if((hash_address = get_hash_address(filepath,"temp.mp3")) == NULL ){
361         fprintf(stderr,"주소를 얻는데 실패 main 함수\n");
362         exit(1);
363     }
364
365     /*전체 주소를 받아와서 출력한다*/
366     sprintf(lyrics_address,"%s%s",PAGE_ADDRESS,hash_address);
367     /*printf("%s\n",lyrics_address);*/
368
369     contain_lyrics = get_lyrics(lyrics_address);
위에 코드중에서 잘못되어있는게 있었다... 뭘까~?























바로 malloc이 잘못되있다는거...다...
(자세한건 malloc쪽을 보면 알겠지만 2byte만큼 메모리 할당이 부족하다)
valgrind 를써서 겨우 알아냈다... memory leak을 검사할때는 이툴이 참 좋은거 같다..
$valgrind --leak-check=yes -v ./runfile 이렇게 했던거 같다
나도 처음이라 레포트가 출력되긴하는데... 자세히는 모르겠고 내가만든 함수,사용하는 함수에 관해서
에러체크가 되있고 소스코드상의 라인번호가 나온다 그고 보고 고치는..
일단 어디새는곳 라인까지 가리켜주니까 찾기도 쉽고... gdb랑 같이 느므느므 좋은거 같다...
(사실 gdb도 시작한지 몇일 안됐;; )
아아~ 세그멘테이션 폴트 뜰때 정말 이프로그램 쓰면 직방이다 ㅜㅜ
이 프로그램짤때도 무한 세그멘테이션 폴트 때문에 애먹는데........
왜 대체가, 전혀~ 에러를 먹어서는 안되는 함수에서 틀렸다고 나오니... 그쪽에서만 틀린거 찾고 있었는데..
(뭐 gdb에서의 bt,run,명령어 만으로 찾아내기는 무리였을지도 모르겠지만...........)
이녀석쓰니깐 해결 해결~~

Segmentation Fault! 조금이라도 줄여보자...

그리고 세그멘테이션 오류가 나지 않는다고 하더라도,
valgrind를 이용해서
혹시모르는 에러가 발생하기 않도록 권고(?) 하는 바이다....

Trackback 0 Comment 4
  1. Favicon of http://blog.naver.com/khmirage.do BlogIcon 환상경 2007.05.08 11:23 address edit & del reply

    으흐 valgrind까지 쓰시다니 천재!!!
    저도 요즘 gdb로 디버깅하는 법 보고 있는데 어렵더라구요 -_-
    그래서 급할때는 puts("Test!!";) 요걸로 하기는 하는데 후...
    어서 익숙해져야 할텐데~ 요원하네요 -_-

    • lowid 2007.05.08 21:09 address edit & del

      gdb도 저 잘 몰라여.. bt,run,변수값 찍기..
      뭐 이런거 빼고는 다 책보고서 -_-;
      저도 puts("SUB Func Start";); 뭐 이런식으로
      만들어서 자주써요.. #define 후에 #ifdef~#endif로
      해서 그 사이에 저런거 많이 집어놓으면서 씁니다.

  2. Favicon of http://sakuragi.org BlogIcon sakuragi 2007.05.09 00:10 address edit & del reply

    저도 최근에 과제하면서 malloc을 쓰는 경우가 많은데, 세그멘테이션 폴트가 많이 나더군요. 그래서 이제는 세그멘테이션 폴트가 나오면 malloc부터 의심하게 된다는... :)

    • lowid 2007.05.09 12:56 address edit & del

      c는 역시 메모리를 직접다루니까 편리하기도 하지만
      이런 측면에서 보면 (세세히 다 관리해야 하니까)
      좀 복잡하기도 하네요..

prev 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 next