배열 해제?
글쓴이: 익명 사용자 / 작성시간: 금, 2002/08/02 - 9:50오후
소켓 플밍을 하거 있습니다.. 데몬작업.. 쓰레드거..
근데 자꾸 세그먼트 폴트가 일어나네여 ㅠ.ㅠ 잘돌다가 ㅠ.ㅠ
core파일 보면 메모리 부족이라거 나오는데......
쩌비.. 많은양의 데이타를 받습니다..
각 쓰레드들은 하나 처리 하고 죽고.. 하는데엽..
배열도 메모리 해제해줘야 하나엽??... 어케여??
해제 해준다거 free 써서 많이 해줬는데도.. ㅠ.ㅠ 문제들이 발생
프로세스가 사용중인 메모리 보면.. 메모리 어쩔땐 엄청 올라갑니다.
아 세그 먼트 폴트 땜시 죽것듬다 ㅠ.ㅠ
좀 도와주세엽..
Forums:
Re: 배열 해제?
Segment fault는 메모리관련 에러가 대부분입니다만...
배열을 해제하는 함수는 없습니다.
free를 많이 쓰셨다는데 malloc함수도 쓰셨겠죠?
보통 segment fault는 스트링관련 함수에서 자주 발생을하죠.
제가 경험해본 결과 strcpy나 sprint같은 스트링 복사나 치환을
주로하는 함수에서 걸립니다. strcpy같은 경우는 원본 배열에서
많은 오류가 발생하는데 간단한 해결방법은 먼저 사이즈를 체크해서
프로그램에서 처리할 수 있는 일정 크기이상이면 에러로 분류를하고
크기에 맞는 복사함수인 strncpy를 사용해서 오류를 미연에 방지
할 수도 있습니다.
그리고 메모리가 자꾸 늘어나는 이유는 메모리를 할당한 후에 재대로
해제를 안해주어서 그런경우인데 이럴경우에는 차분하게 다시한번 소
스를 검토해주는 것이 좋습니다.
혹시 return하는 부분에서 free를 해주지 않았는지를 검사해보시는
것이 좋습니다.
배열로 잡은 변수를 free를 이용해서 해제시키려는 무식한 방법은
동원하지 마십시요. free는 malloc으로 잡은 메모리에대한 반환만
을 합니다. malloc으로 잡지않은 메모리영역을 free를 이용해서
한다면 메모리 관리자가 어떠한 영역을 해제시킬지 모르기 때문입니다.
정 잡히지가 않는다면 소스를 한번 올려놔보시기 바랍니다.
댓글 달기