Переосмысление UInt64 как структуры - PullRequest
1 голос
/ 02 апреля 2012

В моем коде я вычисляю значение UInt64, а затем приводю его так:

return *(Cell*)packedUInt64;

Ячейка - это структура. Marshal.SizeOf (new Cell ()) печатает 8, поэтому он должен соответствовать UInt64, но приведенный выше сбой с AccessViolationException. Я мог бы попробовать более безопасные методы, такие как Marshal.StructureToPtr, но мне все еще интересно, где ошибка в моем коде? Может быть проблема несовпадения выравнивания?

1 Ответ

2 голосов
/ 02 апреля 2012

Если я вас правильно понимаю, вы вычисляете значение UInt64 (как?), А затем приводите его к POINTER.Вы на самом деле не конвертируете его в структуру Cell, а в область памяти, в которой находится эта Cell.В этом случае AccessViolationException кажется вполне понятным.

Это то, что вы на самом деле пытаетесь сделать, или я неправильно понял ваш код?

...