Попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена. Ошибка C # - PullRequest
2 голосов
/ 25 февраля 2011

Я пишу приложение для работы с изображениями в WPF C #. Он читает файл изображения попиксельно, используя небезопасный код.

Проблема, которую я получаю, заключается в том, что она выдает ошибку Attempted to read or write protected memory. This is often an indication that other memory is corrupt. при записи значения пикселя Он хорошо работает для некоторых изображений, а для других показывает ошибку. Ниже приведен код:

unsafe
            {
                byte* pbuff = (byte*)buff.ToPointer();
                for (int i = 0; i < size; i=i+stride)
                  {
                        pbuff[i] = (byte)cr[j].NewColor.Blue;
                        pbuff[i + 1] = (byte)cr[j].NewColor.Green; // here it shows error
                        pbuff[i + 2] = (byte)cr[j].NewColor.Red;
                   }
            }

EDIT

Чтение пикселей работает нормально.

                B = (double)pbuff[i];
                G = (double)pbuff[i + 1];
                R = (double)pbuff[i + 2];

Он не показывает ошибки при чтении, но для того же индекса (который был прочитан) показывает ошибку при попытке записи.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011

В основном это означает, что вы пытаетесь записать в память вне памяти, выделенной для объекта, на который ссылается pbuff.

Так что это в основном то же самое, что индекс массива вне границ в безопасном коде.

1 голос
/ 25 февраля 2011

Если вы используете WPF, вам не следует использовать небезопасный код, а лучше играть с WPF. Вот для чего, по-моему, WriteableBitmap Class .

...