@nrailgun
2017-10-05T20:39:47.000000Z
字数 616
阅读 1269
程序设计
使用 Assert 是一个好的想法,运行过程中出现错误可以帮助快速定位。
TODO:掌握一个简单的测试工具🔧。
数据维度大的时候排除错误很困难,建议使用数据中的一小部分输出观察结果。另外的好处是许多针对大数据的程序没有处理好小数据的边界,这样容易发现错误。
边界控制是程序设计易错部分,不过我个人总结出了一些技巧。
某些情况下,数组需要检查是否操作位置超出了边界,需要拓展数组。技巧是,检查数组尺寸是否大于操作位置,因为尺寸总是大于下标:
if (nint > i + 1)
a[i + 1] = var;
相反地,如果过界就是:
if (nint <= i + 1)
a = realloc(N);
while (i <= size - 1) {
和
while (i < size) {
这两者是不同的,在内存管理中,出现 size = 0xffffffff + 1
是比较常见的,数值上为 0
,但是真正的意思是 0x100000000
,使用形式 2 会导致判断永远失败。
建议使用动态内存的时候,使用显眼的变量明明其长度,并在 access 的时候使用 assert(i >= 0 && i < N)
。
互相依赖的类型的析构函数特别麻烦,必须小心。
例如:类型 A
包含了数据成员 vector<B>
,但是 B
的析构函数依赖于 A
,那么你必须手动在 ~A()
中调用 vector<B>::clear()
。