2012-04-02 66 views
1

在我的代碼我計算UINT64值,則鑄造這樣的:重讀UINT64作爲結構

return *(Cell*)packedUInt64; 

細胞是一個結構。 Marshal.SizeOf(new Cell())打印8,所以它應該匹配一個UInt64,但上面的轉換與AccessViolationException崩潰。我可以嘗試更安全的方法,如Marshal.StructureToPtr,但我仍然想知道我的代碼中的錯誤在哪裏?也許對齊不匹配問題?

+0

我回避Marshal.StructureToPtr的一個原因是它有點慢。 – 2012-04-02 15:00:41

+0

''StructureToPtr'正是你需要使用考慮你甚至要求如何避免使用它。 – 2012-04-02 16:33:54

回答

2

如果我正確理解你,你正在計算一個UInt64值(如何?),然後將其轉換爲POINTER。你實際上並沒有將它轉換爲Cell結構,而是將其轉換爲Cell所在的內存位置。在這種情況下,AccessViolationException似乎完全可以理解。

這是你真正想要做什麼,或者我誤解了你的代碼?