【发布时间】:2014-09-11 08:41:36
【问题描述】:
使用以下代码:
static unsafe void Main( string[] args )
{
int a = 5;
IntPtr pa = new IntPtr( &a ); // no error
var xa = pa.ToPointer();
string b = "test";
IntPtr pb = new IntPtr( &b ); // compile error
var xb = pb.ToPointer();
}
会产生编译错误:
无法获取托管类型('type')的地址、大小或声明指向托管类型('type')的指针
指向托管类型的指针有什么问题?
【问题讨论】:
-
编译器 100% 确信您无法正确取消引用该 IntPtr。没错,字符串可以在任何时候被销毁,在你初始化 IntPtr 几纳秒之后。 .NET 垃圾收集器不是保守的收集器。