问题标签 [access-violation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2628 浏览

c# - 无法捕获的 AccessViolationException

我快要绝望了。我正在使用 C# 和一些 p/Invoking 为 Windows Mobile 6.1 开发现场服务应用程序。(我想我引用了大约 50 个本机函数)

在正常情况下,这没有任何问题,但是当我开始强调 GC 时,我得到了一个令人讨厌的 0xC0000005 错误,女巫似乎无法捕获。在我的测试中,我正在快速关闭并打开一个对话框表单(该表单确实使用了本机功能,但为了测试,我将这些注释掉了),过了一会儿,Windows Mobile 错误报告器过来告诉我有一个致命的我的应用程序中的错误。

我的代码在事件中使用了 try-catchApplication.Run(masterForm);并挂钩CurrentDomain.UnhandledException,但应用程序仍然崩溃。即使我附加了调试器,Visual Studio 也会在发生异常时告诉我“与设备的远程连接已丢失”。

由于我没有成功在托管环境中捕获异常,因此我试图从 Error Reporter 日志文件中找出意义。但这没有任何意义,关于错误的唯一一致的是它发生的应用程序。

我不知道应用程序发生的线程,发生错误的模块有时会有所不同(我见过我的application.exe,WS2.dll,netcfagl3_5.dll和mscoree3_5.dll),甚至错误代码并不总是一样的。(大多数时候是 0xC0000005,但我也看到了 0X80000002 错误,这是第一个字节的警告?)

我尝试通过 bugtrap 进行调试,但奇​​怪的是,这会以相同的错误代码 (0xC0000005) 崩溃。我试图用visual studio打开kdmp文件,但我似乎没有任何意义,因为它只在我步入错误时显示反汇编代码(除非我有正确的.pbb文件,我没有't)。WinDbg 也是如此。

长话短说:坦率地说,我不知道在哪里寻找这个错误,我希望 stackoverflow 上有一些聪明的灵魂。我很高兴提供一些代码,但目前我不知道要提供哪一部分..

任何帮助是极大的赞赏!

[编辑 2010 年 5 月 3 日]

正如您在我对 Hans 的评论中看到的那样,我在取消所有 P/Invokes 的注释后重新测试了整个程序,但这并没有解决我的问题。我尝试用尽可能少的代码重现错误,最终看起来多线程访问给我带来了所有问题。

在我的应用程序中,我有一个用作手指/轻弹滚动列表的用户控件。在这个控件中,我为列表中的每个项目使用一个位图作为画布。在这个画布上绘图是由一个单独的线程处理的,当我禁用这个线程时,错误似乎消失了。我会对此做更多的测试,并将结果发布在这里。

0 投票
2 回答
175 浏览

c++ - 软件产品应该如何处理访问冲突

我们有一个 C++ 软件产品,由于编译器的记录问题会生成错误代码(是的,我知道它本身很糟糕)。这与其他错误一起导致引发访问冲突。

我们对此的回应是捕捉错误并继续运行。

我的问题是,这是一种负责任的方法吗?当应用程序发生如此灾难性的失败时,让应用程序继续存在是否有责任?提醒用户并死亡会更负责任吗?

编辑:
让异常未处理的论点之一是访问冲突表明程序被阻止造成伤害,并且可能还没有做任何事情。我不确定我是否买了那个。对此有何看法?

0 投票
5 回答
2853 浏览

visual-studio-2008 - VS2008 C++ MFC 访问冲突仅在单步调试模式时

这太疯狂了。它开始在我的主项目中发生,所以我创建了一个小的示例全新项目来重现它,果然..它不会发生在我创建的只是一个 Win32 控制台应用程序的示例项目中。

如果这很重要,我正在 Win7x64 上运行它。VS2008 SP1。

开始。我创建了一个带有按钮的小对话框应用程序。在该按钮的处理函数中放置一个断点。按钮处理函数如下所示:

点击按钮,点击断点。F10 步进,然后繁荣:“TestProject.exe 中 0x0398f77b 的第一次机会异常:0xC0000005:访问冲突。”

它让我可以选择中断或继续。如果我继续,它只是再次击中它,而不是“第一次机会”。是的,我在 Debug->Exceptions dlg 中检查了该异常。

如果我中断,调用堆栈只会显示断点所在的行。如果我再次F10 .. 我再次遇到异常,现在调用堆栈在 _AfxDispatchCmdMsg() 函数中显示我,而我原来的 OnBnClickedButton1() 不再在调用堆栈中。

我把断点放在哪里并不重要。

如果我不按 F10,而是继续按 F5,则它可以正常工作。

现在..如果我构建一个发布版本并在调试模式下运行:我打断点,所有的指针,变量值看起来都很正常。F10,这些变成垃圾。this 指针现在为零。m_csHello 现在是

但是,在 Release 模式下,没有捕获到异常,并且一切运行良好。“hello World”字符串按原样显示在对话框中。

我已经询问过 IT 部门在过去一两天内是否在我的盒子上安装了一些补丁。这不是在 2 天前发生的。

你怎么看?VS2008是否损坏?

谢谢。

编辑:附加信息。如果我构建/调试 x64 平台,则不会发生这种情况。仅适用于 Win32。
我还查看了包装盒上 VS2008 的所有修补程序/安全更新。他们是

最后,我将项目放在了过去 2-3 周没有更新的另一台机器上。它可以在那里找到,并且安装了这些相同的 VS 更新。

为了这篇文章的目的,我还更改了正在逐步执行的代码。.. 这是一个简单的整数赋值,不涉及 MFC。

目前我正在重新安装VS2008。

0 投票
1 回答
1617 浏览

vb6 - 从 VB6 使用 .NET BackgroundWorker 失败并出现 AccessViolationException

以下 MSDN 示例承诺演示如何使用 VB6 中的 .NET BackgroundWorker,但它失败并出现 AccessViolationException。唯一的解决方法是将 VB6 代码编译为 P 代码,但这对我们来说不是一个可行的选择。

http://msdn.microsoft.com/en-us/library/aa719109(VS.71).aspx

这里有很多问题的细节

如何在不将 VB6 代码编译为 P 代码的情况下修复示例以使其正常工作?

0 投票
4 回答
3005 浏览

c++ - 访问冲突

我一直在学习如何在 C++ 甚至 C 中使用 NOP 函数,但是网上关于它的教程很少。在过去的几个小时里,我一直在谷歌上搜索,但我被困住了。这是我的代码。

这是假设 NOP 的 3 个字节长的 DEC 函数可以防止我失去生命。但是每次我尝试它时,它都会使黑客崩溃并说我有访问冲突。我试图查找原因,其中大多数涉及我正在写入的位置的大小以及我正在复制的内容。否则,我完全不知道。你能帮忙的话,我会很高兴。游戏是 GunRoar,基地址“0x409A7E”是 DEC 函数所在的位置。

0 投票
2 回答
753 浏览

c++ - Windows 中的 Paint 事件中的异常和访问冲突

在执行了一些新代码后,我的 C++ 应用程序开始表现得很奇怪(屏幕更新不正确或不完整,有时根本没有屏幕更新)。一段时间后,我们发现新代码导致了访问冲突。奇怪的是,应用程序只是继续运行(但屏幕更新不正确)。

起初我们认为问题是由“try-catch(...)”构造引起的(由一位过度活跃的前同事放在那里),但几个小时后(仔细检查调用堆栈,添加许多断点,... ) 我们发现,如果在绘制事件中存在访问冲突,Windows 会捕获它,并继续运行应用程序。

  • 这是正常行为吗?
  • Windows 在绘制事件期间捕获异常/错误是否正常?
  • 有没有办法禁用它?(如果不是,这意味着我们必须始终在调试器中运行,并在测试代码时启用所有异常)。

编辑:

  • 在 XP 上,正确的崩溃(访问冲突后想要的行为)
  • 在 Vista 和 Windows 7 上,应用程序继续运行
0 投票
4 回答
4253 浏览

c# - 访问冲突异常仅在没有附加调试器的情况下运行 C# 应用程序时出现

我有一个在 Visual Studios 2008 中运行良好的应用程序,我正在尝试将它放入 VS 2010 以使用 .NET 4,但我遇到了一个非常奇怪的问题。当我从发布模式或调试模式运行代码并附加调试器 (F5) 时,运行程序没有问题。但是,当我在没有附加调试器(Shift+F5)的情况下从 Release 或 Debug 运行程序时,当我尝试在GDCM的 dll 中运行一些代码时,会出现访问冲突异常。我已经使用 CMake 和 Swig 创建了 dll,并按照此处的说明调整了为 VS 2010 和 .NET 4 构建所需的说明。

有没有人知道为什么会发生这种情况以及我该如何解决?

这是发生错误的程序示例。同样,如果您在 VS 2010 中使用以下程序创建一个项目,它会在附加调试器时运行良好,如果未附加调试器则失败。

0 投票
2 回答
1799 浏览

.net - 使用 WinDbg 和 ADPlus 7.0 帮助捕获 AV

我想在 SQL Server Compact Edition 中捕获内存访问冲突,如 http://debuggingblog.com/wp/2009/02/18/memory-access-violation-in-sql-server-compact-editionce/ 中所述配置是:

我下载了最新的调试工具并观察了微软将 adplus 工具重写为托管代码的内容并更改了配置文件的语法。我像这样重写配置文件:

我收到错误“找不到代码异常:clr;av”。如果我理解正确它没有加载 sos 扩展,但我找不到我应该用来加载它的正确部分和语法。

adplus_old.vbs - 由于某些原因没有在 Windows 7 上启动进程。WinDBG 6.12.0002.633 X86 ADPlus 引擎版本:7.01.002 02/27/2009

也许有人有一个使用最新的 adplus.exe 调试 .NET 应用程序的工作示例?

0 投票
2 回答
1651 浏览

c++ - 我的代码有什么问题?(pdcurses/getmaxyx)

它给了我在 getmaxyx 行(主函数的第二行)上的访问冲突,并且还给了我这两个警告:

是的,它与我问的另一个问题中的代码相同,只是我让它更清楚。是的,我以前用 pdcurses 编写过程序,没有任何问题。

0 投票
2 回答
1716 浏览

c++ - 访问冲突读取数组的元素

我编写了自己的代码来解析 .obj 模型文件——本质上只是 ASCII 文本。根据我的测试,该文件被正确解析并存储在类中。我可以在加载函数中很好地读回值(来自数据成员)。

当我尝试读回主渲染循环中的值时,就会出现问题。以“int v”开头的行存在访问冲突错误:

我不确定为什么会发生这种情况,并且我已经检查了我可能想到的所有内容。我在 C++ 方面不是很有经验。我的大部分编程经验是 Java、Python 和 PHP,尽管我之前用 C++ 编写过一个中型项目。

我确定问题是与内存分配或用于动态数组的指针有关的基本问题。

以下是 obj 加载类中的相关代码部分:

结构 ObjFace、ObjVert、ObjUV 和 ObjNormal 定义为:

谢谢你的帮助。此外,将来避免这些类型的错误的任何良好资源将不胜感激。