【问题标题】:FatalExecutionEngineError was detected at byte[] allocation在 byte[] 分配中检测到 FatalExecutionEngineError
【发布时间】:2013-11-17 22:17:25
【问题描述】:

我有一个运行良好的代码。突然,它开始在一个位置出现致命错误。错误消息如下。 它发生在一个 byte[] 分配中。

byte[] b = new byte[69+(data.Length*4)];

其中Length = 1078400。(对于较小的尺寸,代码运行正常)。

检测到 FatalExecutionEngineError 消息:运行时已 遇到致命错误。错误的地址在 0x5e53a1f9, 在线程 0x11d8 上。错误代码为 0xc0000005。这个错误可能是 CLR 或用户的不安全或不可验证部分中的错误 代码。此错误的常见来源包括用户编组错误 COM 互操作或 PInvoke,这可能会损坏堆栈。

编辑:更多代码:

public WriteFocFile(List fochead, cuFloatComplex[] data,> 字符串路径)

     {
        double[] a = new double[fochead.Count];
        a = fochead.ToArray();
        double datares = (a[6] - a[5]) / (Math.Pow(2,a[3]));

        byte[] b = new byte[69+(data.Length*4)];

        b[0] = Convert.ToByte(a[0]);

        b[1] = Convert.ToByte(a[1]);
        b[2] = Convert.ToByte(a[2]);
        b[3] = Convert.ToByte(a[3]);
        Buffer.BlockCopy(BitConverter.GetBytes(Convert.ToUInt16(a[4])), 0, b, 4, 2);
        //similarly more Buffer.BlockCopy

        cuFloatComplex temp;
        for (int i = 0; i < data.Length; i++)
        {
           //array operation and copying of data in b
        }
        File.WriteAllBytes(@path+".msf", b);

    }

【问题讨论】:

  • 您有非托管代码吗?你使用外部库吗?你最近更新过这些吗?
  • 我不直接使用非托管代码。我只使用了作为引用添加的包装 dll。
  • 我认为我们需要一些上下文(包括更多代码,例如 data 的来源)。
  • 最明显的事情是仔细检查data.Length 的值,确保它不是一个大得离谱的数字。除此之外,您的机器是否有最新的 Windows 更新?
  • 更新了。长度约为 4 MB,应该不是问题。

标签: c# visual-studio-2010 .net-4.0 bytearray fatal-error


【解决方案1】:

错误是由其他地方的非托管代码部分引起的。非托管代码很可能会破坏托管堆,从而导致 FatalExecutionEngineError。具体来说,该错误是由未正确处理的非托管数组引起的。

【讨论】:

  • 这并没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • 这是我的问题,基于 cmets,我发现了我的问题。问题本身与这个问题无关。
  • @Naresh 即使这是您自己的问题,aswwer 也应该说一些合理的话。这被自动机制标记为低质量。
  • 看来这对我很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多