如果我得到一个指向数组第一个元素的指针,我是否可以超出数组范围并将任意数据写入 GC 堆内存,从而有效地破坏堆和垃圾收集器,或者是否有任何安全防护? CLR 反对这种混乱。
代码示例:
unsafe {
int[] intArray = new int[100];
fixed (int* ptr = intArray) {
*(ptr - 42) = 456872;
}
}
是否有可能以这种方式导致内存损坏,从而可能损坏 CLR 自己的数据结构?