代码之家  ›  专栏  ›  技术社区  ›  user8245457

字节指针NullReferenceException

  •  0
  • user8245457  · 技术社区  · 7 年前

    长话短说,这显然是有效的代码。在Unity3D中工作-在PC上运行良好。当试图访问特定地址时,为Android构建-NRE-NRE,在下面的代码块中注释。

    public static unsafe byte[] SerialiseFloat(byte header, float val)
    {
        data = new byte[5];
        fixed (byte* b_ptr = data)
        {
            *b_ptr = header;
            *((float*)(b_ptr + 1)) = val; //NRE
            return data;
        }
    }
    

    无论如何,这一点在上面评论的那条线上是-NRE。有人知道这是怎么可能的吗?我该如何开始修复它?它一直在发生,它被明确地分配和固定。内存分析表明,它被完全正确地引用,所有内容都按预期对齐。现在复制了大约15次。

    1 回复  |  直到 7 年前
        1
  •  0
  •   user8245457 user8245457    7 年前

    幸亏 GSerg 因为他的评论指向我 this question . 我现在知道了ARM的对齐约束,这些约束在处理浮点值时发挥作用。现在我知道了原因,我将简单地强制我的结构打包以进行严格对齐。感谢大家的提醒-作为移动开发和ARM的新手,我完全不知道这一点,肯定会失眠,所以我非常感谢!

    编辑:我的代码生成器现在在Android上预处理生成的合同,强制浮点字段始终与4字节内存地址对齐,在运行了一些序列化测试后,只是一个更新,以确认一切正常工作。