세그멘테이션 폴트를 줄이자! 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를 이용해서
혹시모르는 에러가 발생하기 않도록 권고(?) 하는 바이다....