当前位置:C++技术网 > 资讯 > 我在网上了解下说是指针错误,真正的新手,求点拨

我在网上了解下说是指针错误,真正的新手,求点拨

更新时间:2016-07-16 15:59:19浏览次数:1+次

C++技术网解答:


问题点:Expression:nptr != NULL 断言错误。
解释:
    断言错误就是界面提示Debug Assertion 的错误,发生在调试Debug模式下,Release模式下会自动忽略断言错误检查,所以,往往会出现程序已经停止运行的问题,你却不知道什么问题。
    一般我们没有自己写断言检测,调试时会出现断言错误,这是库函数中有断言检测。出现这样的错误,一般都是传参不对或者中间处理的结果并不是预期的,会导致后续的处理崩溃,比如除零错误,比如空指针错误。你在自己的代码中写可以写断言检测哦。
    断言的用法可以查询MSDN,输入assert查询。或者百度谷歌查询,或者在C++技术网查询。 针对本文的问题,就是指针为空的断言错误。所以,我们检查代码的时候,看指针出现的位置,来查找问题。图示代码似乎没有明显的指针的变量,但是请注意,字符数组的使用也就是指针的效果。断言提示的nptr,我们可以看得出是指针问题,是内存操作错误一类问题。指针的英文单词是pointer,这里简写ptr,看到这个字样,可以得知是指针。所以这里看得出指针的值为空NULL了。
    观察代码,调用了atoi库函数,其他地方是变量操作,无关指针。然后在atoi函数的参数中,看到了argv[1]、argv[2],argv是main函数传进来的命令行参数,多个参数以字符数组形式传递,这里就是将命令行参数的值传给了atoi函数,然后引发了指针为空的断言错误。
    所以据此可以推知,程序在调试的时候直接启动了,并没有传递任何命令行参数,所以,调用atoi就崩溃了。在Release版会导致程序直接停止运行。
    那么解决问题的办法请阅读《应用程序如何传递参数(命令行)以及如何测试命令行》。