스레드 프로그램에서 network서비스를 하는데 한명에 대한 접속을 할때 thread를 생성시키고 서비스가 끝나면 스레드가 종료됩니다.
이때 가끔식 세크먼트 폴트 나며 프로그램이 죽습니다.
이유는 이미 free해준 메모리의 값이 0x00이 아니라 0x01이렇게 처리 되어서 죽습니다.
메모리를 free해줬는데 이런 경우도 있나요?
cpp 라...
기본적으로 malloc 은 free 로 지우고 new 는 delete 로 지워야 합니다.
malloc 와 new 가 같은 메모리 매니저를 이용해야 한다는 표준안이 없기 때문에 malloc 으로 생성한걸 delete 지우면 문제가 될 수도 있습니다.
혹시 이런 문제는 아닐까요?
그리고 malloc 이나 free 함수콜 자체에서 에러의 발생한다면, 가장 빈번한 이유는 malloc 으로 생성한 메모리의 버퍼 언더/오버 플로우에 의해 malloc 이 메모리 관리를 위해 기록한 데이터 부분을 손상시켰을 때 입니다.
정말 잡기 어려운 버그중에 하나가.
할당된 메모리 범위를 벗어나는 영역에 접근하는 것입니다.
님의 경우에도, 모두 검토해 봐서, 다른경우에 이상이 없다면, 이 문제를 의심해 보시기 바랍니다.
이 문제를 가장 잘 인식하기 쉬운 방법은 적재적소에 assert()를 넣는것입니다.
PS:
허가되지 않은 메모리의 접근에 의한 버그는..
그 버그의 위치에서 문제가 발생하지 않습니다.
그 위치를 넘어간 이후에 발생하는데.
이는 경우에 따라 다른곳에서 생기기 때문에,
아무래도 경험의 중요성이 대두되는군요..
그럼 버그 잘 잡으시기 바랍니다.
^^
WOW Wow!!!
Computer Science is no more about computers than astronomy is about telescopes.
-- E. W. Dijkstra
메모리를 free한다고 0이 되지는 않는걸로 알고 있습니다.프로그래밍
메모리를 free한다고 0이 되지는 않는걸로 알고 있습니다.
프로그래밍을 편하게 하기 위해 free한 후 인위적으로 0으로 만드는 경우는 있습니다만...
Re: 메모리 free를 했습니다. 그런데 값이 0x01입니다.
답변 고맙습니다.
또 malloc_usable_size 메시지가 나오고 세크먼트 폴트 나며 프로그램이 죽습니다. 자주 이 메시지가 나오는데 malloc에서도 나오고 free에서도 나오고 10번에 3번정도 나오는 것 같습니다.
cpp여서 그런가요?
막을 방법이 없을까요?
[code:1]char *buf;...buf = malloc&
혹시 이경우 아니신지~~~?
삽질의 대마왕...
cpp 라... 기본적으로 malloc 은 free 로 지우고 new
cpp 라...
기본적으로 malloc 은 free 로 지우고 new 는 delete 로 지워야 합니다.
malloc 와 new 가 같은 메모리 매니저를 이용해야 한다는 표준안이 없기 때문에 malloc 으로 생성한걸 delete 지우면 문제가 될 수도 있습니다.
혹시 이런 문제는 아닐까요?
그리고 malloc 이나 free 함수콜 자체에서 에러의 발생한다면, 가장 빈번한 이유는 malloc 으로 생성한 메모리의 버퍼 언더/오버 플로우에 의해 malloc 이 메모리 관리를 위해 기록한 데이터 부분을 손상시켰을 때 입니다.
스레드라면 충분히 가능한 이야기 같습니다.다른 스레드에서 메모리가
스레드라면 충분히 가능한 이야기 같습니다.
다른 스레드에서 메모리가 해체된 이후에 참조할 확률이 많을것
같습니다. free에 의해 발생한 seg fault가 맞다면
스레드를 종료부분 적절한 위치에 테스트 출려구문을 넣어주고
한번 테스트해보시기 바랍니다.
Chaos to Cosmos,
Chaos to Chaos,
Cosmos to Cosmos,
Cosmos to Chaos.
정말 잡기 어려운 버그중에 하나가.할당된 메모리 범위를 벗어나는 영역
정말 잡기 어려운 버그중에 하나가.
할당된 메모리 범위를 벗어나는 영역에 접근하는 것입니다.
님의 경우에도, 모두 검토해 봐서, 다른경우에 이상이 없다면, 이 문제를 의심해 보시기 바랍니다.
이 문제를 가장 잘 인식하기 쉬운 방법은 적재적소에 assert()를 넣는것입니다.
PS:
허가되지 않은 메모리의 접근에 의한 버그는..
그 버그의 위치에서 문제가 발생하지 않습니다.
그 위치를 넘어간 이후에 발생하는데.
이는 경우에 따라 다른곳에서 생기기 때문에,
아무래도 경험의 중요성이 대두되는군요..
그럼 버그 잘 잡으시기 바랍니다.
^^
WOW Wow!!!
Computer Science is no more about computers than astronomy is about telescopes.
-- E. W. Dijkstra
댓글 달기