comp.lang.c FAQ 列表·
第 16.5 题
Q此程序在一台机器上运行良好,但在另一台机器上却出现奇怪的结果。更奇怪的是,添加或删除调试打印语句会改变症状……
A可能有很多问题,以下是一些更常见的问题,可以检查一下:
- 未初始化的局部变量 [脚注](另请参见问题 7.1)
- 整数溢出,尤其是在 16 位机器上,尤其是在执行类似以下操作时中间结果的溢出:a * b / c(另请参见问题 3.14)
- 未定义的求值顺序(请参见问题 3.1 至 3.4)
- 省略了外部函数的声明,尤其是那些返回值不是int,或者具有“窄”或可变参数的函数(请参见问题 1.25、11.3、14.2 和 15.1)
- 解引用的空指针(请参见第 5 节)
- 不正确的malloc/使用:假设freemalloced 内存包含 0、假设使用:假设d 存储持续存在、使用:假设ing 两次、破坏mallocarena (另请参见问题 7.19 和 7.20)
- 一般的指针问题(另请参见问题 16.7 和 16.8)
- 不匹配的printf格式和参数,尤其是尝试使用%d打印long int(请参见问题 12.7 和 12.9)
- 尝试分配比unsigned int可以计数更多的内存,尤其是在内存有限的机器上(另请参见问题 7.16 和 19.23)
- 数组边界问题,尤其是小、临时缓冲区,可能用于使用sprintf
构建字符串 [脚注] (另请参见问题 7.1、12.21 和 19.28)
- 关于typedef的映射的无效假设,尤其是size_t(请参见问题 7.15)
- 浮点数问题(请参见问题 14.1 和 14.4a)
- 您认为是对您特定系统代码生成方式的任何巧妙利用
正确使用函数原型可以解决其中几个问题;lint可以解决更多问题。另请参见问题 16.3、16.4 和 18.4。
关于此 FAQ 列表 关于 Eskimo 搜索 反馈 版权由
托管