Насколько я знаю, оба эти метода небезопасны ... Да, он компилируется, однако, потому что вы использовали unsafe
в ваших Helper
методах и ссылались на одну и ту же память, ваш safety- net было взорвано.
Вы указывает на часть памяти (управляемый объект), которая может быть перемещена с помощью Garbage Collector (он же ваш массив), потенциально оставляющий вам висячий указатель
. Вам необходимо исправить (fixed
) массива в вашем Main
метод обеспечения безопасности (как мне кажется) или ваша структура
Например
fixed (byte* p = bytes) // even though p isn't being used
{
SomeStruct* pointer = Helper.GetPointer<SomeStruct>(bytes);
pointer->field1 = 3;
pointer->field2 = 4;
}