1

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

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

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

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

编辑:更多代码:

public WriteFocFile(List fochead, cuFloatComplex[] data,> string path)

     {
        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);

    }
4

1 回答 1

1

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

于 2013-11-07T14:05:07.517 回答