许多地方有可能出错。
下面是一些通常的检查要点:
1、未初始化的局部变量, 参见问题7.1。
2、整数上溢, 特别是在一些16 比特的机器上, 一些中间计算结果可能上溢, 象a* b / c, 参见问题3.11。
3、未定义的求值顺序, 参见问题3.1 到3.5。
4、忽略了外部函数的说明, 特别是返回值不是int 的函数, 或是参数“缩小” 或可变的函数。参见问题1.8, 11.4 和15.1。
5、复引用空指针, 参见第5 章。
6、malloc/free 的不适当使用: 假设malloc 的内存都被清零、已释放的内存还可用、再次释放已释放内存、malloc 的内部被破坏, 参见问题7.16 和7.17。
7、指针类常规问题, 参见问题16.7。
8、printf() 格式与参数不符, 特别是用%d 输出long int, 参见问题12.7。
9、试图分配的内存大小超出一个unsigned int 类型的范围, 特别是在内存有限的机器上, 参见问题7.14和19.27。
10、数组边界问题, 特别是暂时的小缓冲, 也许用于sprinf() 来构造一个字符串,参见问题7.1 和12.19。
11、错误的假设了typedef 的映射类型, 特别是size t。
12、浮点问题, 参见问题14.1 和14.4。
13、任何你自己认为聪明的在特定机器上的机器代码生成小技巧。
正确使用函数原型说明能够捕捉到一些以上的问题。
lint 会捕捉到更多。
参见问题16.3, 16.4 和18.4。