VC ++中的异常错误c0000005

时间:2013-06-18 12:33:23

标签: c++ visual-c++ exception crash access-violation

正在使用VC ++控制台应用程序。

此应用程序从Appdata \ Roaming文件夹发送文件一段时间。

遇到此崩溃错误会发生什么:

Problem signature:
Problem Event Name: APPCRASH
Application Name:   App.exe
Application Version:    1.0.0.2
Application Timestamp:  51c02fa8
Fault Module Name:  PCMeter.exe
Fault Module Version:   1.0.0.2
Fault Module Timestamp: 51c02fa8
Exception Code: c0000005
Exception Offset:   000069eb
OS Version: 6.1.7601.2.1.0.256.48
Locale ID:  1033
Additional Information 1:   0a9e
Additional Information 2:   0a9e372d3b4ad19135b953a78882e789
Additional Information 3:   0a9e
Additional Information 4:   0a9e372d3b4ad19135b953a78882e789

有谁可以帮我解决这个问题

2 个答案:

答案 0 :(得分:31)

异常代码c0000005是访问冲突的代码。这意味着您的程序正在访问(读取或写入)其没有权限的内存地址。最常见的原因是:

  • 访问过时的指针。那就是访问已经解除分配的内存。请注意,这种陈旧的指针访问并不总是导致访问冲突。只有当内存管理器将内存返回给系统时,才会出现访问冲突。
  • 读取数组的结尾。这是当你有一个长度为N的数组时,你可以访问索引为>=N的元素。

要解决此问题,您需要进行一些调试。如果您无法在开发计算机上的调试器下发生故障,则应获取故障转储文件并将其加载到调试器中。这将允许您查看代码中代码的位置,并希望引导您找到解决方案。您需要具有与可执行文件关联的调试符号才能看到有意义的堆栈跟踪。

答案 1 :(得分:-1)

我在为作业运行批量测试时遇到了同样的问题。事实证明,当我将一些 iostream 操作(打印到控制台)从类构造函数重定位到类中的方法时,它解决了。

我认为这与构造函数中的 iostream 操作有关。

修复方法如下:

// Before
CommandPrompt::CommandPrompt() : afs(nullptr), aff(nullptr) {
    cout << "Some text I was printing.." << endl;
};


// After
CommandPrompt::CommandPrompt() : afs(nullptr), aff(nullptr) {

};

请随意解释更多幕后的错误,因为它超出了我的 cpp 知识。