gpt4 book ai didi

c++ - 解释访问冲突异常?

转载 作者:行者123 更新时间:2023-11-27 23:51:20 25 4
gpt4 key购买 nike

我们有一个围绕 VB/C++ 代码构建的自定义应用程序。此代码将运行数天、数周、数月,而不会引发异常错误。

我正在尝试详细了解如何抛出此错误,以及如何解释(如果可以)抛出异常时列出的错误。我搜索了一些信息并阅读了 Microsoft 提供的错误描述,但我仍然坚持解决难得一见的问题。没有已知的一组与软件的交互导致这种情况并且似乎是随机发生的。

第一个异常是根本原因吗?是否一直向下调用堆栈?谁能提供有关如何阅读这些代码的任何见解,以便我可以解释我实际需要查看的位置。

任何有关阅读异常或使用它然后解决问题的信息或指导都会有所帮助。下面的测试是在抛出事件时从 Windows 日志中复制的。

在此先感谢您的帮助。

Application: Epic.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.AccessViolationException [![enter image description here][1]][1]
at MemMap.ComBuf.IsCharAvailable(Int32)
at HMI.frmPmacStat.RefreshTimer_Elapsed(System.Object, System.Timers.ElapsedEventArgs)
at System.Timers.Timer.MyTimerCallback(System.Object)
at System.Threading.TimerQueueTimer.CallCallbackInContext(System.Object)
at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext,
System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext,
System.Threading.ContextCallback, System.Object, Boolean)
at System.Threading.TimerQueueTimer.CallCallback()
at System.Threading.TimerQueueTimer.Fire()
at System.Threading.TimerQueue.FireQueuedTimerCompletion(System.Object)
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

enter image description here enter image description here

最佳答案

有一些异常是由 c++ 运行时环境抛出的,作为执行 throw 表达式的结果,还有其他类型的错误是由操作系统或硬件捕获您的指令引起的。对内存的无效访问通常不会由 C++ 中的代码抛出,而是计算试图在无效地址访问内存的表达式的副作用,导致操作系统向进程发出信号,通常会终止它。因为它在 C++ 之外,所以它往往是特定于平台的,但典型的错误是:

  • 读取空指针
  • 使用指向已删除对象的指针
  • 超出数组元素的有效范围
  • 在 STL 容器中使用无效的迭代器

一般来说,您可以在运行时测试 null 和数组边界,以防患于未然。使用悬垂指针更难追踪,因为删除和误用该指针之间的时间可能很长,如果没有内存调试器(例如 valgrind),很难找到发生这种情况的原因。使用智能指针而不是原始指针可以帮助减轻内存管理不当的问题,并有助于避免此类错误。

无效迭代器是一般悬空指针问题的子集,但很常见,值得单独一提。了解您的容器以及哪些操作会使它们无效是至关重要的,一些实现可以在“ Debug模式”下编译,这有助于检测无效迭代器的使用。

关于c++ - 解释访问冲突异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46199928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com