程序退出时出现C#内存错误

时间:2009-12-16 11:18:19

标签: c# finereader

我有一个相当简单的C#程序(没有UI,只是命令行),它使用第三方库(Abbyy的Finereader 8.1)做一些工作然后退出。

足够简单,效果很好。最近我们开始从程序中得到以下错误:

  

应用程序错误:指令位于   “0x2c0de46b”引用了内存   “0x0732aa84”。

一点点挖掘表明这是在C#代码结束时发生的。基本上最后两行是:

  Console.WriteLine(message);
  return statusCode;

写入最终的控制台消息,程序的输出正常。实际上,如果不是因为这个错误导致程序无法完全终止,我可以解决它。

我们正在运行两个脚本,每个脚本在两台机器上调用此程序。这是随机发生的(据我所知)但通常至少有一个(4个脚本)每天都会出现这种情况。我认为也许某些奇怪的事情发生在并发运行中,但测试消除了这一点。

任何关于可能原因的想法都会受到欢迎,因为我的想法已经用完了。

此外,如果有人知道在发生这种情况时让程序终止的方法,那将非常有用。

2 个答案:

答案 0 :(得分:1)

“应用程序错误:”0x2c0de46b“处的指令引用”0x0732aa84“处的内存。”

此错误意味着您的代码中某处存在内存损坏,而没有完整的代码,我不能说更多。 在这种错误情况下,异常上升的位置并不重要。尝试查看您的代码,尤其是调用库的代码。

答案 1 :(得分:1)

嗯......故障排除决定了我问的是什么改变了,但我想你自己也想过这个。您使用的是什么版本的.NET框架?什么操作系统会出现此问题?

我相信这个例外来自第三方库所做的一些清理。你有没有联系他们的支持?您是否可以尝试显式卸载库并查看错误是否仍然存在?

或者......您是否尝试为未处理的异常添加处理程序?可能值得一试......

public static void Main()   
{   
    AppDomain.CurrentDomain.UnhandledException +=   
        new UnhandledExceptionEventHandler(   
            OnUnhandledException);

    //some code here....
}   

/// <summary>
/// Occurs when you have an unhandled exception
/// </summary>
public static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)   
{ 
    //here's how you get the exception  
    Exception exception = (Exception)e.ExceptionObject;  

    //bail out in a tidy way and perform your logging
}

DoctaJonez示例代码)

只是抛出一些东西,因为似乎没有明确的答案(<)。