1

在我的代码中,我正在计算 UInt64 值,然后将其转换为:

return *(Cell*)packedUInt64;

单元格是一个结构。Marshal.SizeOf(new Cell()) 打印 8,因此它应该匹配 UInt64,但上面的转换会因 AccessViolationException 而崩溃。我可能可以尝试更安全的方法,例如 Marshal.StructureToPtr,但我仍然想知道我的代码中的错误在哪里?也许是对齐不匹配问题?

4

1 回答 1

2

如果我理解正确,您正在计算 UInt64 值(如何?),然后将其转换为 POINTER。您实际上并未将其转换为 Cell 结构,而是转换为该 Cell 所在的内存位置。在这种情况下,AccessViolationException 似乎完全可以理解。

这是你真正想要做的,还是我误解了你的代码?

于 2012-04-02T15:03:49.077 回答