FAQ: 为什么我的程序在本地跑没事,交到你的 OJ 上就挂了(ノ=Д=)ノ┻━┻

本文讨论了编程中常见的问题,如数组越界、不同平台的换行符影响、编译器优化设置、使用%lld而非%I64d以及内存管理,提醒开发者注意这些问题以提高代码在在线评测系统的稳定性。
摘要由CSDN通过智能技术生成
  • 你的数组越界了,你的数组越界了,你的数组越界了!一些隐藏的数组越界可能在本地不会报错,而到了 OJ 上由于运行环境发生了变化,才发生错误。数组越界不仅可能导致运行错误,也可能导致答案错误或超时等,这是由于数组越界干扰了其他内存导致的。
  • 局部变量尽可能设初值!原理同上。某些实现较好的编译器会帮你自动加上初值,但是大多数情况下(包括 OJ 的编译器)不会。
  • 本 OJ 已经禁用 #pragma GCC optimize 等强制打开编译器优化的技巧,提交此类代码会出现编译错误。
  • 不要使用 gets 等读取一行,因为这些函数使用换行符来判断行结束(当然也不要手动判断换行符)。Windows 下换行符是 \r\n,而 Linux 下换行符是 \n。假设此题的数据是在 Windows 下生成的,那么它的换行符是 \r\n,而 OJ 上的程序是在 Linux 下编译的,读取的换行符是 \n,这样就会导致字符串的最后多出一个 \r
  • 请记得使用 %lld 而非 %I64d
  • 如果出现了编译错误,记得旧版 g++ 编译器(比如 Dev-C++ 自带的)不需要引入 <cstring> 或 <cstdio> 等,而 OJ 上的 g++ 需要。
  • 如果你内存超限了,记住 OJ 是 64 位系统,指针占 8 字节内存。
  • 你的程序可能有精度等其他问题。
  • 如果很多人都挂了,也可能是 SPJ 由于上述原因挂了。
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值