代码之家  ›  专栏  ›  技术社区  ›  user62572

.NET下访问冲突错误的常见原因

  •  7
  • user62572  · 技术社区  · 16 年前

    我在寻找.NET下访问冲突错误的常见原因。

    到目前为止我检查过的东西-

    • 对所有实现IDisposable的对象调用Dispose
    • 检查COM对象调用中的有效参数
    • 显式删除所有手动添加的事件处理程序
    • 不要明确地打电话GC.收集/GC.WaitForPendingFinalizers
    • 添加和 删除 处理本机对象(位图等)时的内存压力( 补充 )
    • 验证所有PInvoke调用的参数类型是否有效
    • 确保正确使用IntPtr、SafeHandle和HandleRef
    • 线程(线程安全、可重入函数)、正确使用waithandles。( 补充
    • 确保应用程序和DLL都针对同一平台(x86或x64)(应用程序和DLL的目标应与COM对象针对同一平台)( 补充

    还有其他建议吗?

    -将崩溃转储分析移到不同的问题。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Ric Tokyo    16 年前

    任何不安全或非托管代码的使用都可能导致这种类型的异常。

    AccessViolationException:

    访问冲突发生在 尝试读取或写入内存 还没有分配给 错误的值。不是所有的读或写 违规,所以是访问违规 或者写的东西 堕落。因此,访问违规 几乎总是表示严重 编程错误。在.NET中 框架2.0版 AccessViolationException明显异常

    在完全由 可验证的托管代码,全部 引用要么有效要么为空, 而且违规进入是不可能的。 发生AccessViolationException 与非托管代码或 不安全的托管代码。

    推荐:

    GFlags Application Verifier

        2
  •  1
  •   Sandeep Datta    16 年前

    您是在运行时生成IL还是使用一个这样做的组件?使用不安全的C代码,进行指针操作?