Rust Flatbuffers 索引超出范围错误

标签 rust flatbuffers

<分区>

我有这样的架构:

table BinaryValue {
    buf: [ubyte];
}

table MyValue {
    ...[some other fields]
    my_binary_value: BinaryValue;
}

当我尝试像这样访问 my_binary_value 时,我收到此消息:

'索引 3136 超出了长度为 140 的切片的范围'

我用来访问的代码是:

        let my_binary_value = match op.my_binary_value() {
            Some(binary_value) => match binary_value.buf() {
                Some(buf) => {
                    println!(
                        "buf: {:?}",
                        buf
                    );
                    buf
                }
                None => {
                    return Err(format_err!("The my_binary_value is required."));
                }
            },
            None => {
                return Err(format_err!(
                    "The binary_value is required"
                ));
            }
        };

它在这条线上发生 panic :

let my_binary_value = match op.my_binary_value() {

我打印出 binary_value 的值,它看起来没问题(截断):

Some(BinaryValue { _tab: Table { buf: [20, 0, 0, 0, 48, 52, ...], loc: 60 } })

这里是生成的 FlatBuffers 代码:

#[inline]
  pub fn buf(&self) -> Option<&'a [u8]> {
    self._tab.get::<flatbuffers::ForwardsUOffset<flatbuffers::Vector<'a, u8>>>(BinaryValue::VT_BUF, None).map(|v| v.safe_slice())
  }

知道我做错了什么吗?

最佳答案

我解决了这个问题,请参阅上面的评论。重要的是要确保使用联合字段将正确的类型放入 ..._type 字段中,因为它无法进行类型检查。

关于Rust Flatbuffers 索引超出范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58250403/

相关文章:

arrays - 如何在 Rust 中将切片作为数组获取?

rust - 有没有推荐的模式来构建具有嵌套类型的Flatbuffer?

c++ - 在 C++ 中读取通过 ZMQ 发送的 Flatbuffers 对象会引发未处理的异常

flatbuffers - FlatBuffers : Compatibility of runtime and compiler

generics - 无法创建多态类型,因为无法将特征制成对象

rust - 调用函数时,如何自动将From特质转换为通用参数类型?

json - Flatbuffer 与 CBOR

javascript - 如何将 javascript 数组序列化为 google flatbuffers?

compiler-errors - 为什么借用检查器会拒绝内联表达式但接受其分解形式?

methods - 如何通过函数指针调用方法?