问题标签 [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 回答
2349 浏览

c++ - 字符串到 PCWSTR -> 奇怪的返回(C++)

我对 C++ 编程真的很陌生,我在写入 xml 文档时遇到了问题。

我正在使用来自 msdn ( http://msdn.microsoft.com/en-us/library/ms766497(VS.85).aspx ) 的 xml 输出器的一个稍微改变的示例。

我给 CreateAndAddTestMethodNode 一个字符串,它用 stringtopcwstr 将它转换为 pcwstr,或者应该这样做。

但它只返回类似“0x00bb9908‘وووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووووو’,这会导致访问冲突中的下一个方法之一,这将是真正伟大的,如果有人能够给我的线索,在那里我做了失败。

谢谢你。

0 投票
0 回答
3858 浏览

c# - Berkeley DB:我在这里做错了什么?

我编写了一个小程序来探索将 Berkeley DB 与 C# 结合使用。

它创建一个用作表的数据库和许多辅助数据库作为该表的索引。问题是崩溃并出现以下错误:

在将一定数量的记录写入表后,它总是崩溃。此外,当我增加 nIndexes 的值时,在崩溃之前写入的记录数会下降。如果这些值足够低(例如 nIndexes = 5,nRecords = 50),则程序将顺利完成。这让我觉得我正在用完有限的资源,但我就是看不出问题出在哪里。

0 投票
3 回答
456 浏览

c# - C# .Net 文件使用中的问题

我在打开最近被 .Net 框架关闭的文件时遇到问题。基本上,会发生以下情况:

  • 使用读入 XML 文件DataSet.ReadXml()
  • 对数据进行一些更改
  • 使用写出 XML 文件DataSet.WriteXml()
  • 使用以下命令将 XML 文件复制到新位置File.Copy
  • 使用自定义控件 FTP 文件

在 WriteXML 或 File.Copy 之后,此序列可能会间歇性地失败,并出现文件正在使用异常。
我猜这可能是 Windows 写缓存没有立即刷新。谁能确认这可能导致我的问题?有什么解决方案可以建议吗?

谢谢,

0 投票
1 回答
1471 浏览

delphi - 使用 Windows 文件对话框时在奇怪的地方访问冲突

很久以前,我发现由于使用了封装了 Windows 对话框的 Delphi 打开文件和/或保存文件对话框,我的代码中出现了访问冲突。我在几个论坛上问了一些问题,并被告知这可能是由于某些程序向 shell 系统添加挂钩的方式导致 DLL 被注入每个进程,其中一些可能会对程序造成严重破坏。作为记录,我使用的编程环境是运行在 32 位 Windows XP 上的 Delphi 6 Professional。

当时我通过不使用 Delphi 的 Dialog 组件而是直接调用 comdlg32.dll 来解决它。这很好地解决了这个问题。

今天我第一次使用内存映射文件,果然,访问冲突开始出现在代码的奇怪部分。我尝试了我的 comdlg32.dll 直接调用,但这次没有帮助。为了将问题隔离为测试,我创建了一个列表框,其中包含我在测试期间使用的完全相同的文件。这些是我从打开文件对话框中选择然后启动我的内存映射文件的完全相同的测试文件。我进行了设置,以便通过单击列表框中的文件,我将在内存映射文件测试中使用该文件,而不是调用 comdlg32.dll 对话框函数来选择测试文件。

再次,访问违规消失了。为了向您展示我在 1 到 3 次试验中遇到访问冲突到根本没有遇到访问冲突,这是多么戏剧性的修复。不幸的是,当我确实需要使用文件对话框时,它当然会在以后咬我。

有没有其他人也处理过这个问题并找到了真正的罪魁祸首?你们有没有找到我可以用来解决这个问题的解决方案,而不是像现在这样绕着它跳舞?

提前致谢。

0 投票
1 回答
1111 浏览

delphi - 来自 Delphi 的 Supports -> QueryInterface 的访问冲突异常

我有以下代码:

此代码在我的应用程序执行期间被多次调用,但在某些特定情况下,它在 Supports() 方法中失败。更具体地说 - 它似乎属于 Supports() 方法中的 QueryInterface() 调用。

我检查了 FControlList 不是 nil 并且 FControlList[i] 不是 nil 并且它仍然会发生。

任何想法将不胜感激!!!

0 投票
1 回答
1423 浏览

c++ - 调用 OnDestroy() 后 ActiveX 控件 (COleControl) 会发生什么情况?

我有一个用 C++ 编写的在 Internet Explorer 8 中运行的 ActiveX 控件。大多数时候(大约 90%)当包含该控件的选项卡或浏览器关闭时,会出现如下访问冲突:

访问冲突发生在调用 OnDestroy() 之后但在调用控件的析构函数之前。

调试输出说:

我的代码都没有出现在堆栈跟踪中,尽管堆可能在执行期间的某个较早时间点被损坏。

ActiveX 控件在调用 OnDestroy() 和控件的析构函数之间接收哪些生命周期事件?

0 投票
2 回答
472 浏览

visual-c++ - 'sprintf' 方法是否有默认缓冲区长度?

我使用 sprintf 方法将数据格式化为我想写入文件的字符串,在 C++ 控制台应用程序中使用 VS 2008。输入是一个特定的消息,它有各种变量和值(例如:类型'int'和值' 10' / 键入字符串和值“abc”等)当我发送两条消息时,它工作得很好。但是当我发送两个以上的消息时,它会给出一个运行时错误,说0xC0000005: Access violation reading location 0xabababab。为什么会这样?是因为方法 'sprintf' 具有默认缓冲区长度吗?我该如何克服这个问题?

0 投票
1 回答
2334 浏览

c# - AccessViolationException,试图读取或写入受保护的内存

我正在使用一个包含用于与特定硬件交互的非托管代码的 dll,并且我正在尝试从 C# 中使用它,但我不断收到 AccessViolationException。

是什么原因造成的,我该如何解决?

0 投票
4 回答
620 浏览

c++ - 使用类成员变量时访问读取错误

我有一个在头文件中声明的私有成员变量的类。在我的构造函数中,我传入一些文件名并使用这些名称创建其他对象。这工作正常。但是,当我尝试添加另一个成员变量并在构造函数中对其进行初始化时,我遇到了访问读取冲突。我将代码发送给其他人,它在他的计算机上运行良好。知道有什么问题吗?

这是有问题的代码:

.h 文件:

这是 .cpp 文件:

我完全不知道是什么原因造成的——有什么想法吗?

谢谢,bsg

0 投票
4 回答
1666 浏览

c++ - 使用 memcpy 或分配给结构中的数组的访问冲突

更新 2:

好吧,我已经将我拥有的解决方法重构为一个单独的函数。这样,虽然它仍然不理想(特别是因为我必须在函数外部释放函数内部分配的内存),但它确实提供了更普遍地使用它的能力。我仍然希望有一个更优化和优雅的解决方案……


更新:

好的,所以问题的原因已经确定,但我仍然无所适从。

我试图找出一种(简单/有效)的方法来修改结构中数组的几个字节。我目前的解决方法是动态分配大小相等的缓冲区、复制数组、对缓冲区进行更改、使用缓冲区代替数组,然后释放缓冲区似乎过多且不太理想。如果我必须这样做,我不妨将两个数组放入结构中并将它们初始化为相同的数据,然后在第二个中进行更改。我的目标是减少内存占用(仅存储原始数组和修改后的数组之间的差异)和手动工作量(自动修补数组)。


原帖:

我昨晚写了一个运行良好的程序,但是当我今天重构它以使其更具可扩展性时,我遇到了一个问题。

原始版本有一个硬编码的字节数组。经过一些处理后,一些字节被写入数组,然后进行了一些处理。

为了避免对模式进行硬编码,我将数组放在一个结构中,以便我可以添加一些相关数据并创建它们的数组。但是现在,我无法写入结构中的数组。这是一个伪代码示例:

那个有效,但这个无效:

第二个版本导致分配上的访问冲突异常。我确定这是因为第二个版本分配内存的方式不同,但我开始头疼,试图弄清楚是什么或如何解决这个问题。(我目前正在通过动态分配与模式数组大小相同的缓冲区、将模式复制到新缓冲区、对缓冲区进行更改、使用缓冲区代替模式数组来解决它,然后试图记住释放临时缓冲区。)

(具体来说,原始版本将模式数组(+偏移量)转换为 DWORD* 并为其分配一个 DWORD 常量以覆盖四个目标字节。新版本不能这样做,因为源的长度是未知的——可能不是四个字节——所以它使用 memcpy 代替。我已经检查并重新检查并确保指向 memcpy 的指针是正确的,但我仍然遇到访问冲突。我使用 memcpy 而不是 str(n)cpy 因为我是使用普通字符(作为字节数组),而不是 Unicode 字符并忽略空终止符。使用上述赋值会导致同样的问题。)

有任何想法吗?