在byte []分配时检测到FatalExecutionEngineError

时间:2013-11-06 15:32:05

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

我有一个工作正常的代码。突然间它开始在一个地方发出致命错误。错误消息如下。 它出现的是byte []分配。

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

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

  

检测到FatalExecutionEngineError消息:运行时具有   遇到致命错误。错误的地址是0x5e53a1f9,   在线程0x11d8上。错误代码是0xc0000005。这个错误可能是一个   CLR中的错误或用户的不安全或不可验证部分   码。此错误的常见来源包括用户编组错误   COM-interop或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);

    }

1 个答案:

答案 0 :(得分:1)

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