编辑感谢您的所有投入.我想我的问题只是有点模糊.因此我接受了一个明智的答案并选择了2个小时的顽固退出(9)调试并发现,或至少删除了两个错误,现在我很自豪能够解决一个困难的谜语…… 😉
我已经为http://www.spoj.pl上的问题解决方案投入了大量时间,并且该程序在本地使用我自己创建的所有测试样本以及问题描述中的那些样本.
但是,程序在服务器上使用SIGSEGV中止.在那里,我已经选择了C99严格语言选项上传它.
编辑:让我再次明确指出,对于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系统上编译的,-m32版本在常规的Debian Lenny amd64系统上编译(但仅因为Squeeze被-m32打破).
valgrind -v对我的程序来说也很完美.
我所有的malloc和calloc都确保返回值非零.除了tsearch之外,我没有使用任何东西,除了非常常见的标准函数.
我想收集一些指示,告诉我如何找出问题所在. (如果有什么,但假设输入具有意外的属性)
最佳答案 在反馈有限的环境中,您可以使用的一个工具是我称之为“二分搜索”的问题来源:
首先上传将在服务器上运行的最简单的“hello world”程序,并验证它是否不会崩溃.然后,开始添加代码块,直到程序崩溃.当它执行时,回溯并添加较小的代码块,直到您将其缩小到负责崩溃的特定代码段.
一旦缩小范围,您可以尝试重新编写麻烦的代码块,或者寻找不同的方法来完成正确的结果.