目前碰到过的卡了很久的bug

本文记录了在编程过程中遇到的一些难以发现的错误,包括数组越界、隐式类型转换导致的问题、溢出错误、格式输出不正确等,并分享了如何排查和避免这些错误的经验。此外,还提到了特定平台如UVA和POJ的注意事项,以及使用编译器警告来辅助减少错误的方法。

将不断更新(希望能不更新)

 

for(int j = 0; j < b[i].size() - k; j++) 

 

多组数据特判在continue前没有读完所有的数据

 

当代码真的没有写错的时候,再想想算法的正确性。

 

同上还有复杂度。

 

在隐秘的角落很可能就溢出了 long long = int * int这样是会溢出的

 

maxn如果手滑少写了一个0很难想到这方面的问题

 

而且数组越界引发的未定义行为出现的bug可能会非常的奇怪

 

uva的题目格式要求真的很sb,找不到问题最好去看看别人题解的格式

 

poj的古董编译器慎用stl,常数巨大,亲测TLE到30ms的区别(poj一生黑

 

还有poj的神秘bug:int函数末尾没有返回值导致wa,然而那个函数根本不会运行到底部

 

double的输出不是%lf 输出没有%lf的用法(c++11后支持

 

函数传入数组参数,数组会隐式转换成指针,所以memset只会初始化指针大小的空间

 

如果出现奇怪的情况往往是UB了,比如本地和oj/本地和别人电脑结果不一样;边界明确却莫名死循环;加了几个无关紧要的语句结果却发生变化

 

int溢出虽然大部分编译器表现一致,但是想要利用自然溢出最好还是用unsigned

 

可以用编译命令减少sb错误 见https://codeforces.com/blog/entry/15547

试了一下dev能用的大概有-Wall -Wextra -pedantic -std=c++14  -Wshadow -Wformat=2 -Wfloat-equal -Wconversion -Wlogical-op  -Wcast-qual   -fstack-protector -Wcast-align -O2

 

有负权边的时候要特判INF,不能直接加减

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值