在C#中写的是我无法访问未分配的内存。他们说这在不安全的背景下是可能的。我的问题是如何做到这一点? 我试过这样的事情:
static void Main(string[] args)
{
unsafe
{
int c;
Console.WriteLine(c);
}
}
在项目属性中使用allow unsafe选项。而且这段代码无法编译。
答案 0 :(得分:1)
unsafe
关键字不会完全改变语言或编译模型,在使用它们之前仍需要初始化任何变量。如果要访问“未分配的内存”,则需要获取指向该内存的指针。这是一个例子:
unsafe void AccessMemory()
{
const int address = 10000;
byte[] array = new byte[0];
fixed (byte* zero = array)
{
byte* p = zero + address;
}
}
这里我们得到一个指向空数组的指针,它给出零指针。然后我们将该指针偏移一些量(地址),这会产生指向该内存地址的指针。