Индекс вне границ и окон x64 / x86 - PullRequest
0 голосов
/ 10 января 2012

У меня странная проблема - если я запускаю свое приложение на своем рабочем столе, x86 Windows7 - это нормально, но когда я пытаюсь запустить его на Windows Server 2008 x64 - у меня появляется индекс из-за исключительной ситуации.В моем приложении я читал байты изображений, изменяя их с помощью указателей и т. Д.

Пробная сборка для других платформ (x86, x64, Any CPU) - не помогло.

Какое может быть решение для этого?

Редактировать:

Эта функция делает исключение:

    private static unsafe Bitmap LoadStatic(Stream stream)
    {
        BinaryReader bin = new BinaryReader(stream);

        bin.ReadInt32();
        int width = bin.ReadInt16();
        int height = bin.ReadInt16();

        if (width <= 0 || height <= 0)
            return null;

        int[] lookups = new int[height];

        int start = (int)bin.BaseStream.Position + (height * 2);

        for (int i = 0; i < height; ++i)
            lookups[i] = (int)(start + (bin.ReadUInt16() * 2));

        Bitmap bmp = new Bitmap(width, height, PixelFormat.Format16bppArgb1555);
        BitmapData bd = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555);

        ushort* line = (ushort*)bd.Scan0;
        int delta = bd.Stride >> 1;

        for (int y = 0; y < height; ++y, line += delta)
        {
            bin.BaseStream.Seek(lookups[y], SeekOrigin.Begin);

            ushort* cur = line;
            ushort* end;

            int xOffset, xRun;

            while (((xOffset = bin.ReadUInt16()) + (xRun = bin.ReadUInt16())) != 0)
            {
                cur += xOffset;
                end = cur + xRun;

                while (cur < end)
                    *cur++ = (ushort)(bin.ReadUInt16() ^ 0x8000);
            }
        }

        bmp.UnlockBits(bd);

        return bmp;
    }
...