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 に答える