EDIT 입력 해 주셔서 감사합니다. 제 질문은 약간 퍼지기 만 한 것 같아요. 나는 현명한 대답을 받아 들였고 2 시간의 고집적 출구 (9) 디버깅을 선택하여 적어도 두 개의 버그를 제거하고 이제는 어려운 수수께끼를 풀어 낸 것을 자랑스럽게 생각합니다. ;-)C 소스 코드의 가능한 문제점을 찾아내는 도구와 방법
http://www.spoj.pl에 대한 문제 해결을 위해 많은 시간을 투자했으며 프로그램은 문제 설명에서 나온 테스트 샘플뿐만 아니라 내가 직접 만든 모든 테스트 샘플과 함께 로컬로 작동합니다.
그러나 프로그램은 서버에서 SIGSEGV
으로 중단됩니다. 거기에 C99 strict
언어 옵션을 선택하여 업로드했습니다.
수정 : SIGSEGV
이 어떻게 발생했는지에 대한 힌트가 전혀 없다는 것을 분명히 다시 설명하겠습니다. 내가 가지고있는 유일한 정보는 전혀 발생하지 않는다는 것입니다. 이걸 지적한 @Oli Charlesworth에게 감사드립니다.
로컬, 나는 모두
gcc -Wall -Wextra -std=c99 -o prog prog.c
및
gcc -Wall -Wextra -m32 -std=c99 -o prog prog.c
컴파일 모든 것이 잘 작동했다. 64 비트 버전은 일반 Debian squeeze amd64 시스템에서 컴파일되었습니다.이 시스템은 데비안 Lenny amd64 시스템의
-m32
버전입니다 (단, Squeeze는
-m32
로 인해 손상 되었기 때문에).
valgrind -v
도 내 프로그램과 완벽하게 일치합니다.
내 모든 malloc
과 calloc
의 반환 값이 0이 아닌지 확인하십시오. tsearch
을 제외하고는, 나는 아주 일반적인 표준 기능 외에 아무것도 사용하지 않고있다.
문제의 원인을 알 수있는 몇 가지 정보를 수집하고 싶습니다. (예기치 않은 속성을 가진 입력을 가정하고 있다고 가정되는 경우)
gdb를 사용하셨습니까? – Hgeg
서버에서 충돌하기 전에 프로그램의 출력을 볼 수 있습니까? 즉 당신은 어떤 printf()를 추가하여 문제가 발생한 곳을 볼 수 있습니까? –
@Hgeg : 아니요, 프로그램이 내 시스템에서 정상적으로 작동 할 때 사용할 수있는 방법입니까? –