在C#中使用不安全关键字是否可能导致内存损坏

在C#中使用不安全关键字是否可能导致内存损坏,c#,clr,heap-corruption,stack-corruption,C#,Clr,Heap Corruption,Stack Corruption,如果我得到一个指向数组第一个元素的指针,我是否可以超出数组的范围,将任意数据写入GC堆内存,从而有效地破坏堆和垃圾收集器,或者在CLR中是否有任何防止这种混乱的安全措施 代码示例: unsafe { int[] intArray = new int[100]; fixed (int* ptr = intArray) { *(ptr - 42) = 456872; } } 是否有可能以这种方式导致内存损坏,从而可能损坏CLR自身的数据结构?能否显示一段您认

如果我得到一个指向数组第一个元素的指针,我是否可以超出数组的范围,将任意数据写入GC堆内存,从而有效地破坏堆和垃圾收集器,或者在CLR中是否有任何防止这种混乱的安全措施

代码示例:

unsafe {
    int[] intArray = new int[100];
    fixed (int* ptr = intArray) {
        *(ptr - 42) = 456872;
    }
}

是否有可能以这种方式导致内存损坏,从而可能损坏CLR自身的数据结构?

能否显示一段您认为会破坏CLR的代码?可能可以。这取决于页面的访问标志。但是,如果该页面属于托管堆,我很确定您在访问它时不会出错。不安全代码是不安全的,您可以破坏它,正如我最近的博客文章所示。当然,任何使用指针的代码的基本属性都是无法验证的。抖动将拒绝编译它,除非此代码以完全信任模式运行。