什么是assertion failed?这篇文章让你彻底搞懂!

吉云

今儿个,咱来聊聊编程时碰到的一个坎儿——“assertion failed”。一开始碰到这玩意儿,我也有点懵,心里还犯嘀咕:这又是啥幺蛾子?别急,咱慢慢来捋一捋。

记得那天,我正埋头敲代码,兴致勃勃地实现一个新功能。感觉自己写得那叫一个行云流水,结果一运行,啪,程序直接给我撂挑子,蹦出来一个错误提示,赫然写着“assertion failed”。

我当时就愣住,心想:啥玩意儿?断言失败?这是在说我写的代码有问题?不行,我得好好瞅瞅。

什么是assertion failed?这篇文章让你彻底搞懂!

于是我开始一步步调试。我仔细看看错误信息,发现它指向代码中的某一行。这一行代码长这样:

assert(result == expected_result);

,原来是这里出问题。这行代码的意思是,程序运行到这里的时候,会检查一下 result 这个变量是不是等于 expected_result。如果相等,那就万事大吉;如果不相等,那就“断言失败”,程序就撂挑子不干。

这下我明白,问题就出在 resultexpected_result 这两个变量上。我赶紧把这两个变量的值给打印出来看看:


printf("result = %d, expected_result = %d\n", result, expected_result);

什么是assertion failed?这篇文章让你彻底搞懂!

这一看,果然,这两个值不一样!怪不得程序会报错。

我就开始倒推,看看这个 result 是怎么来的。我顺着代码往上找,发现 result 是通过一系列计算得出来的。于是我又把这些计算过程中的中间变量也给打印出来,一步步排查。

经过一番折腾,我终于找到问题的根源:原来是在计算过程中,有一个地方我把一个加号写成减号!你说这粗心大意的。

找到问题,解决起来就简单。我把那个减号改成加号,重新运行程序,这下一切正常,“assertion failed”的错误提示再也没出现过。这回经历也让我明白一个道理:编程这活儿,细心真的很重要!一个小小的错误,就可能导致程序崩溃。以后写代码,我可得更加仔细才行!

还有,通过这回“assertion failed”的经历,我算是跟“断言”这家伙打个照面。以后再碰到它,咱也不怵,兵来将挡,水来土掩,见招拆招呗!

什么是assertion failed?这篇文章让你彻底搞懂!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]