C# System.AccessViolationException是否使用双指针?

C# System.AccessViolationException是否使用双指针?,c#,pointers,double,C#,Pointers,Double,我想在托管代码中将纹理压缩到pvrtc,这样我就找到了一个符合我要求的源代码,但我得到了System.AccessViolationException。这是我目前使用的代码: [DllImport("x86/pvrtc.dll", CallingConvention = CallingConvention.StdCall)] private static extern IntPtr CompressTexture(byte[] data, int height, int width, int m

我想在托管代码中将纹理压缩到pvrtc,这样我就找到了一个符合我要求的源代码,但我得到了System.AccessViolationException。这是我目前使用的代码:

[DllImport("x86/pvrtc.dll", CallingConvention = CallingConvention.StdCall)]
private static extern IntPtr CompressTexture(byte[] data, int height, int width, int mipLevels, bool preMultiplied, bool pvrtc4bppCompression, ref IntPtr dataSizes);

public static byte[] Compress(byte[] data, int height, int width, int mipLevels, bool preMultiplied, bool pvrtc4bppCompression)
{
    IntPtr dataSizesPtr = Marshal.AllocCoTaskMem(data.Length + 1);

    var texDataPtr = CompressTexture(data, height, width, mipLevels, preMultiplied, pvrtc4bppCompression, ref dataSizesPtr);
    //Store the size of each mipLevel
    var dataSizesArray = new int[mipLevels];
    //Copies data from an unmanaged memory pointer to a managed 8-bit unsigned integer array.
    Marshal.Copy(dataSizesPtr, dataSizesArray, 0, dataSizesArray.Length);
    var levelSize = 0;
    byte[] levelData = new byte[0];

    for (int x = 0; x < mipLevels; x++)
    {
        levelSize = dataSizesArray[x];
        levelData = new byte[levelSize];

        Marshal.Copy(texDataPtr, levelData, 0, levelSize);

        texDataPtr = IntPtr.Add(texDataPtr, levelSize);
    }
    return levelData;
}
[DllImport(“x86/pvrtc.dll”,CallingConvention=CallingConvention.StdCall)]
私有静态外部IntPtr CompressTexture(字节[]数据、int高度、int宽度、int miplavels、bool预乘、bool pvrtc4bppc压缩、ref IntPtr数据大小);
公共静态字节[]压缩(字节[]数据、int高度、int宽度、int miplavels、bool预乘、bool pvrtc4bppCompression)
{
IntPtr dataSizesPtr=Marshal.allocTaskMem(data.Length+1);
var texDataPtr=压缩纹理(数据、高度、宽度、mipLevels、预乘、pvrtc4bppCompression、ref dataSizesPtr);
//存储每个级别的大小
var DataSizeArray=新的整数[mipLevels];
//将数据从非托管内存指针复制到托管8位无符号整数数组。
复制(dataSizesPtr,dataSizesArray,0,dataSizesArray.Length);
var-levelSize=0;
字节[]levelData=新字节[0];
对于(int x=0;x<0;x++)
{
levelSize=DataSizeArray[x];
levelData=新字节[levelSize];
封送处理副本(texDataPtr,levelData,0,levelSize);
texDataPtr=IntPtr.Add(texDataPtr,levelSize);
}
返回数据;
}

非常感谢您的帮助。

具体在哪一行?在var texDataPtr=CompressTexture(数据、高度、宽度、mipLevels、预乘、pvrtc4bppCompression、ref dataSizesPtr);所以我认为是intPtr。