关于在线评测OJ对于部分数组越界评测失效的问题说明

前两天刘晓红老师问了我两道题目,从这两道题目中,我发现了一个奇特的现象,在此记录一下。

4202 小I的小姐姐

关于在线评测OJ对于部分数组越界评测失效的问题说明
关于在线评测OJ对于部分数组越界评测失效的问题说明
这道题明显应该是b[5001]才对。

1243 母牛的故事
关于在线评测OJ对于部分数组越界评测失效的问题说明关于在线评测OJ对于部分数组越界评测失效的问题说明
这道题明显是数组开小了。

上述两道题目在查验后台数据后发现后台数据没有明显问题,其中母牛的故事后台最大数据范围n=50,但是评测程序却没有检测出数组越界的情况。

经过linux 和 windows 下的数据实验,发现同一份代码,在windows codeblocks中会报数组越界错误,在linux下 codeblocks中也会编译错误,
但是仅使用gcc 命令进行手动编译 代码运行正常,并且输出结果与正确答案一致。

其中母牛的故事 数组大小开49 11AC
10 20 30 40 45 48都是RE。
经过查询资料发现,编译器对于数据越界的行为界定为未定义,即未规定此数据应当如何处理,因此有一定几率程序跑出正确结果。其中在linux环境中,手动编译的话,跑出正确结果的几率更大。

目前要想修复此问题的方法,应该可以通过修改linux评测机上的编译参数来实现,具体需要在服务器上进行相应的测试。