/catalog/5b44b7aebbe041098fbfd868e044f805//Document/296736299995205.html/Document/267328648106053.html/Document/267018778099781.html/Document/266676511322181.html/Document/265619597201477.html/Document/235862026059845.html/Document/235543126302789.html/Document/235180874285125.html/Document/234831289405509.html/Document/234475373678661.html/Document/233059773943877.html/Document/232687006150725.html/Document/232354139811909.html/Document/230936619933765.html/Document/230597170643013.html/Document/230237883404357.html/Document/229522033393733.html/Document/228458058801221.html/Document/227760545189957.html/Document/227398664417349.html/Document/227055527931973.html

白盒测试——C/C++编程规范(11)
本系列文章将带大家一起解析一下白盒测试经常用到的GJB-8114标准规则,其中一共有124条强制性规则。GJB-8114强制性规则是按类分的,一共有13类,前面的文章已经讲过一部分,本文继续往下进行。

R-1-3-4禁止将局部变量地址做为函数返回值返回

我们一个局部变量的地址通常是在栈或者堆上生成的,我退出这个函数之后,这个栈或者堆就已经释放了,这个地址就可以被其他的程序应用了。返回这个地址的话,我一旦将这个程序进行改写,就会影响到别的程序。

可能大家会说,我在里面写个程序试试吧,最后发现没有问题呀,也并没有改写呀,那是因为你的那个程序里不带中断,如果你那个程序里带中断后,就会发现改写的东西太多了。

R-1-3-5禁止使用或释放未分配空间或已被释放的指针

像违背示例中,我们声明一个指针,实际上这个指针是空的,还有我们给一个指针分配地址,结果我们直接给它进行赋值了。

再就是对于这个指针我并没有给它分配空间,没有分配地址,就是说把这个地址给释放了。

最后是说我分配了一个地址,我把这个地址给释放了之后,又用了这个指针,然后又一次释放,这些都是不允许的。

它有时候会使程序跑飞,像违背示例中上面这条指针因为指向的是空,空通常是0,有可能直接就导致死机了。

R-1-3-6指针变量被释放后必须置为空(NULL)

比如违背示例说我们先有一个指针判断,这个指针是否为空,如果不为空的话,我就把它赋值,如果为空的话,我就给它分配一个地址。使用完之后,我就把它给释放了,释放之后,我没有为它赋空值。

程序下次再进入的时候,因为没有为它赋控制,进行判断的时候就不为空,实际上这个地址已经释放了,但是你依然用到这个地址,这个地址在这个时候有可能已经被别的程序占用了。

别的程序还在使用着,你这里又给释放了,就会导致那个程序就崩溃了。这是我们大多数写程序的人最容易犯的错误,要求每次释放完之后,都把它赋成空。