VS 2010中的C++调试访问冲突
C++ Debugging Access Violation in VS 2010
我是Visual Studio的新手,在VS 2010 C++项目中遇到访问冲突错误。访问违规错误有时指向"free.c"微软文件,有时指向项目代码片段。问题是,代码不是我的,但我必须在其中实现一两件事。所以问题是:如何追踪访问违规的根源代码?
只要有人感兴趣:我正在使用OSG和Qt,试图创建新的线程来在后台运行OSG渲染。在一个简单的例子中(只有3d模型+qt按钮),一切都很好,但当我试图将qt按钮实现到项目中时,它总是给我访问违规
感谢您抽出时间!
编辑:
- 这是黄色箭头指向ntdll.dll的地方!77972c39()
- [下面的帧可能不正确和/或丢失,没有为ntdll.dll加载符号]
- kernel32.dll!7776c3d4()
- 这是绿色箭头指向msvcr100.dll的地方!自由(无效*pBlock)线路51 C
- osg75-osg.dll!52f245f1()
- osg75-osg.dll!52f2785e()
- osg75-osgQtd.dll!osgQt::QGraphicsViewAdapter::assignImage(unsigned int i)行565+0x59字节C++
- osg75-osgQtd.dll!osgQt::QGraphicsViewAdapter::setFrameLastRendered(const osg::FrameStamp*FrameStamp)第477行C++
- osg75-osgQtd.dll!osgQt::QWidgetImage::setFrameLastRendered(const osg::FrameStamp*FrameStamp)第54行C++
- osg75-osgViewer.dll!545b5a2e()
- osg75-osgUtil.dll!52c8b6a3()
- msvcr100.dll!malloc(unsigned int size)第89行+0x3b字节C
- msvcr100.dll!运算符new(unsigned int size)第59行+0x8字节C++
- osg75-osg.dll!52eac085()
- 。。打电话给osg dll之类的
同时发现,问题不仅出现在我试图创建新线程的时候,而且出现在其他各种情况下(即使我试图向根组添加一些东西),所以我真正需要的是找出导致访问违规的原因
是否有可能将Debug和Release混合在应用请记住,在中使用Release dll通常是不安全的自Visual Studio发布堆和调试堆不兼容。
多亏了Drescherjm,这就是解决方案。
听起来像是一个无效的指针。发生这种情况时,首先要做的是在堆栈中向上移动,直到您进入项目代码(您通常可以假设"免费"之类的东西运行良好),这可能会指示哪个指针出错。除此之外,它还想知道它是如何获得无效值的。
当然,情况可能会更糟。访问违规几乎是一种通用的"某些错误"类型;例如,一个无效的指针也可以通过一些代码破坏随机内存并命中该指针来创建。这使得很难找到罪魁祸首,因为它从未真正寻址指针。如果它确实"可靠"地命中了指针,您可以尝试在指针上设置一个数据修改断点,每当修改数据时,断点就会中断。
当然,可能还有很多其他的问题。没有简单的"点击这里,点击那里,它告诉你那条断了的线"。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- Visual Studio图形调试器引发读取访问冲突异常
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- 启用 MSVC 调试迭代器时堆栈分配器访问冲突
- 在VS2017上调试简单程序时访问冲突(RtlActivateActivationContextUnsafeFast)
- VS 2010中的C++调试访问冲突
- 调试优先级队列程序时出现访问冲突错误
- 仅在调试时std::string析构函数中存在访问冲突
- 调试访问冲突
- ..处的首次机会异常:读取位置时发生访问冲突..当使用Visual Studio 2010进行调试时
- 在优化的生成中发现访问冲突,但该冲突未显示在调试生成(gcc)中
- 如何调试/修复访问冲突(堆损坏)