编写C/C++代码时,通常使用复杂的代码行来处理多个指针,例如,在单个行上访问多个指针。然而,当访问冲突发生时,很难破译这行代码的哪一部分是问题所在。为了调试这个问题,您可能已经将这一行代码分解成多行,但不会再这样了。当使用Visual Studio 2015更新1时发生这种情况时,您可以很容易地看到导致此异常的指针。现在,我们在异常对话框中直接显示一条消息,通知您哪个变量是nullptr。
让我们来看下面的小C++代码示例。在本例中,我们有一系列类,每个类都包含指向另一个类的指针,以及一个名为GetHelloWorld()的函数。在main()方法中,我们取消引用所有指针,以便打印“Hello World”。
int main() { ClassA* A = new ClassA(); printf(A-> B-> C-> D-> GetHelloWorld()); return 0; }
当我运行这个简单的演示程序时,我在printf行(A->B->C->D->GetHelloWorld())上得到一个访问冲突的异常;我知道这行的某些内容一定导致了访问冲突。但是是哪一个?对于以前版本的Visual Studio,我必须进一步研究代码才能解决这个问题。现在有了VS2015更新1,我所要做的就是查看弹出的异常对话框中的消息。调试器告诉我发生了读取访问冲突,并且a->B是nullptr。
现在,我可以确切地知道代码行的哪一部分导致了访问冲突,并可以修复该问题。