白盒测试——C/C++编程规范(11)
本系列文章将带大家一起解析一下白盒测试经常用到的GJB-8114标准规则,其中一共有124条强制性规则。GJB-8114强制性规则是按类分的,一共有13类,前面的文章已经讲过一部分,本文继续往下进行。
R-1-3-4禁止将局部变量地址做为函数返回值返回
我们一个局部变量的地址通常是在栈或者堆上生成的,我退出这个函数之后,这个栈或者堆就已经释放了,这个地址就可以被其他的程序应用了。返回这个地址的话,我一旦将这个程序进行改写,就会影响到别的程序。
可能大家会说,我在里面写个程序试试吧,最后发现没有问题呀,也并没有改写呀,那是因为你的那个程序里不带中断,如果你那个程序里带中断后,就会发现改写的东西太多了。
R-1-3-5禁止使用或释放未分配空间或已被释放的指针
像违背示例中,我们声明一个指针,实际上这个指针是空的,还有我们给一个指针分配地址,结果我们直接给它进行赋值了。
再就是对于这个指针我并没有给它分配空间,没有分配地址,就是说把这个地址给释放了。
最后是说我分配了一个地址,我把这个地址给释放了之后,又用了这个指针,然后又一次释放,这些都是不允许的。
它有时候会使程序跑飞,像违背示例中上面这条指针因为指向的是空,空通常是0,有可能直接就导致死机了。
R-1-3-6指针变量被释放后必须置为空(NULL)
比如违背示例说我们先有一个指针判断,这个指针是否为空,如果不为空的话,我就把它赋值,如果为空的话,我就给它分配一个地址。使用完之后,我就把它给释放了,释放之后,我没有为它赋空值。
程序下次再进入的时候,因为没有为它赋控制,进行判断的时候就不为空,实际上这个地址已经释放了,但是你依然用到这个地址,这个地址在这个时候有可能已经被别的程序占用了。
别的程序还在使用着,你这里又给释放了,就会导致那个程序就崩溃了。这是我们大多数写程序的人最容易犯的错误,要求每次释放完之后,都把它赋成空。