在我的代码中,我计算了一个UInt64值,然后像这样投射:
return *(Cell*)packedUInt64;
Cell是一个结构。 Marshal.SizeOf(new Cell())打印8,因此它应匹配UInt64,但上面的转换与AccessViolationException崩溃。我可能会尝试更安全的方法,例如Marshal.StructureToPtr,但我仍然想知道我的代码中的错误在哪里?可能是对齐不匹配问题?
答案 0 :(得分:2)
如果我理解正确,你正在计算一个UInt64值(如何?),然后将其转换为指针。您实际上并没有将其转换为Cell结构,而是转换为此Cell所在的内存位置。在这种情况下,AccessViolationException似乎完全可以理解。
这是你真正想要做的,还是我误解了你的代码?