zoukankan      html  css  js  c++  java
  • Visual Studio 2015 Update 1及之后的版本对C++ 内存访问异常调试的一点改进

    编写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。

    现在,我可以确切地知道代码行的哪一部分导致了访问冲突,并可以修复该问题。

  • 相关阅读:
    Java异常:java.security.InvalidKeyException: Illegal key size
    sublime 3同步编辑线上代码
    ThinkPHP5浏览器关闭,继续执行php脚本
    jquery ui实现文字下拉联想
    layui实现多图上传,支持拖拽上传
    ThinkPHP5权限管理
    MySQL优化
    JS实现整个DIV里的字号整体放大或缩小
    JS实现点击图片放大、关闭效果
    sql 周岁计算
  • 原文地址:https://www.cnblogs.com/yilang/p/12855942.html
Copyright © 2011-2022 走看看