리눅스에서 Segmentation fault 뜰때~ 돌려보자~

Posted by 빵빵빵
2012/01/18 17:40 전산(컴퓨터)/리눅스



메모리 깨먹을 때 Segmentation fault 가 작렬하지요...

배열의 첨자를 벗어나서 접근하거나 포인터를 할당된 메모리를 넘어서 접근할때 나지요.

free에서 죽는 경우가 많고요.

주의할점은 malloc으로 strlen만큼 메모리를 잡고 sprintf를 하면 절대!!!!!! 안됩니다.
sprintf는 뒤에 무조건 NULL을 하나 더 넣어주기 때문에 strlen보다 1 크게 잡아줘야 합니다.


또..


*** glibc detected *** free():invalid point

라는 메시지를 툭~~~ 던지고 몇페이지나 되는 데이터가 주루루루루룩~ 올라가는 경우가 있습니다.
요넘도 비정상적인 메모리 프리가 체크되면 뜨는건데요...

Linux libc 5.4.23이후와 GNU libc 2.x 버전은 환경 변수로 malloc을 조정할 수 있습니다.
쉘에서 export MALLOC_CHECK_=3 해주시면 에러 메시지를 출력하고 종료해 줍니다. 설정 값은 0~3

0 : 아무것도 하지 않고 그냥 프로그램 동작.... 프리하는 순간엔 죽겠죠??? 언젠가 맛팅이 가겠죠...
1 : 에러 메시지 출력
2 : 아무런 메시지 없이 프로그램 종료
3 : 에러 메시지 출력하고 프로그램 종료

긍게 2, 3을 해서 메모리 손상이 감지 됬을때 서 버리는게 낫겠죠? 메시지까지 출력해 준다면(3) 최고겠구요...



쉽게 문제의 코드를 찾는 방법은 valgrind 라는 프로그램을 쓰면됩니다.
정말 찾아내는 순간 쪽팔려서 얼굴이 발그레진다능... ㅋㅋㅋ

valgrind 자기가만든프로그램

요렇게 실행하면 어디쯤에서 메모리를 깨먹는지 대충 알려줍니다.... 영어루... ㅡㅡ;

apt-get instll valgrind apt-get install valgrind 를 하면 우분투에선 걍 설치해주겠죠???? 아님 말구... ^^

2012/01/18 17:40 2012/01/18 17:40

이 글에는 트랙백을 보낼 수 없습니다