【发布时间】:2019-09-08 22:05:35
【问题描述】:
我似乎无法分配静态双指针变量。我是不是做错了什么?
使用 .Net 4.7.2
static unsafe float** pointers = (float**)Marshal.AllocHGlobal(sizeof(float) * 32);
static unsafe void Main(string[] args)
{
var i = pointers == default; // false but displays 0x0000000000000000
// stil the same
pointers = (float**)Marshal.AllocHGlobal(sizeof(float) * 32);
// works - 0x00000213094bc7c0
float** test = (float**)Marshal.AllocHGlobal(sizeof(float) * 32);
}
这是正确的行为还是发生在其他人身上?
【问题讨论】:
-
不是我的菜,但不应该是
static unsafe float** pointers吗?甚至不需要编译吗?而且我对您如何在没有unsafe代码块或Main方法声明中的unsafe的情况下成功逃脱感兴趣? -
@stuartd 已编辑:unsafe 在基类 Program 中。
-
啊,很公平。虽然无法在 4.5 或 4.7.2 或 4.8 中使用此代码进行重现 - 此代码是否会为您重现该问题?
-
是的,图片已添加。
-
您的指针是 32 位还是 64 位?浮点数是 32 位,所以看起来你被分配了 32 个指向浮点数的指针。指针的大小将根据编译器选项而有所不同。只有 64 位编译器选项将是 64 位。看起来您被分配了 64 位的 0x0000000000000000。我认为错误是指针只有 32 位。
标签: c# .net visual-studio pointers double-pointer