尝试读取或写入受保护的内存。这通常表明其他内存已损坏。 C#错误

时间:2011-02-25 13:16:43

标签: c# pointers unsafe

我正在用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;
                   }
            }

修改

读取像素效果很好。

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

在读取时没有显示任何错误,但对于相同的索引(已读取),它在尝试写入时显示错误。

2 个答案:

答案 0 :(得分:2)

基本上这意味着您正在尝试写入为pbuff引用的对象分配的内存之外的内存。

所以这与安全代码中的数组索引超出范围基本相同。

答案 1 :(得分:1)

如果您使用的是WPF,则不应使用不安全的代码,而应使用WPF。这就是我认为的WriteableBitmap Class