之前写过一篇文章讲 goto 的 c++中goto的使用,老代码中到处都是goto和标签,然而今天在跑测试用例时却失败了,这个错误就是和标签有关,记录如下。
有两个函数 create 和 delete,创建和删除资源,结果在删除这一步失败了,查看日志,在创建函数里也有错误打印信息,这个 create() 函数类似这样的:

看日志文件时有那行错误的打印

但当我仔细看 create 函数时,没发现有问题,如果函数里调用其他函数有错误而跳到error_label处的话应该还有其他打印的,但是没发现。当我想多加打印进行调试时,突然想到这个标签前没有 return 啊,这个标签后的语句是会顺序执行下去的。
所以在 delete 函数里检测到指针是 null时,用例才失败的,因为在 create 函数里,标签 error_label 后的语句是删除该指针。
本文记录了在C++中使用goto时遇到的问题。跑测试用例失败,问题与标签有关。create和delete函数操作资源,delete失败,create函数看似无问题。经分析发现,标签前无return,标签后语句顺序执行,导致delete检测指针为null时用例失败。
4488

被折叠的 条评论
为什么被折叠?



