Marshal.StructureToPtr терпит неудачу с bool и массивом фиксированного размера?

Если я соберу эту структуру сStructureToPtr а затем снова распаковать егоPtrToStructureмой первый узел имеет y = {1,2}, тогда как мой второй узел имеет y = {1,0}.

Я понятия не имею, почему, возможно, моя структура как-то плоха? Удалениеbool из структуры заставляет это работать.

using System;
using System.Runtime.InteropServices;

namespace csharp_test
{
    unsafe class Program
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct Node
        {
            public bool boolVar;
            public fixed int y[2];
        }

        unsafe static void Main(string[] args)
        {
            Node node = new Node();

            node.y[0] = 1;
            node.y[1] = 2;
            node.boolVar = true;

            int size = sizeof(Node);
            IntPtr ptr = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(node, ptr, false);
            Node node2 = (Node)Marshal.PtrToStructure(ptr, typeof(Node));
            Marshal.FreeHGlobal(ptr);
        }
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос