今天真是有点小郁闷,写代码的时候遇到一个 "assertion failed" 的错误,搞得我头都大。不过还还是给解决,赶紧记录一下,省得以后再踩坑。
我正美滋滋地写着代码,突然程序就崩,弹出一个错误提示框,上面赫然写着 "assertion failed" 。我当时就懵,这是啥玩意儿?
赶紧上网查一下,才知道原来这是“断言失败”的意思。断言嘛你可以理解为程序员在代码里做的“小检查”,用来确保程序在运行的时候,某些条件一定是满足的。如果不满足,程序就会“罢工”,也就是报这个 "assertion failed" 错误。
知道是啥意思,接下来就要找到底是哪里出问题。我仔细看看错误信息,它会告诉你具体是哪一行代码的哪个断言失败。我找到那行代码,发现原来是我写的一个判断条件有问题。
仔细分析
我当时写这段代码的时候,想当然地认为某个变量一定是大于 0 的,所以就写一个断言:
assert(myVariable > 0);
结果,实际运行的时候,这个变量在某种特殊情况下,可能会等于 0,甚至小于 0!这下好,断言失败,程序崩溃。
我的处理办法
找到问题所在就好办。我仔细分析一下代码逻辑,发现这个变量等于 0 也是可以接受的,只是需要做一些额外的处理。于是我把原来的断言改一下:
assert(myVariable >= 0);
然后,在断言后面加一些处理 myVariable
等于 0 的情况的代码。
- 我先是检查下数据源, 看看是不是数据本身有问题;
- 又看看我的函数,是不是有什么地方没考虑到各种输入情况。
改完之后,我重新运行一下程序,这下终于没问题,程序跑得顺畅得很!
这回的经历也让我明白一个道理:写代码的时候,一定要考虑周全,不能想特别是对于一些关键的条件,最好加上断言,这样可以及时发现问题,避免程序出现更严重的错误。而且写断言也是一个很好的习惯,可以让你的代码更健壮,更可靠!以后写代码得更仔细点,多做测试,不能再这么马虎!