Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 锈斑指数超出范围错误_Rust_Flatbuffers - Fatal编程技术网

Rust 锈斑指数超出范围错误

Rust 锈斑指数超出范围错误,rust,flatbuffers,Rust,Flatbuffers,我有这样一个模式: table BinaryValue { buf: [ubyte]; } table MyValue { ...[some other fields] my_binary_value: BinaryValue; } 当我尝试像这样访问我的二进制值时,我收到以下消息: “索引3136超出长度为140的切片的范围” 我用于访问的代码是: 让my_binary_value=匹配op.my_binary_value(){ Some(binary_value)

我有这样一个模式:

table BinaryValue {
    buf: [ubyte];
}

table MyValue {
    ...[some other fields]
    my_binary_value: BinaryValue;
}
当我尝试像这样访问我的二进制值时,我收到以下消息:

“索引3136超出长度为140的切片的范围”

我用于访问的代码是:

让my_binary_value=匹配op.my_binary_value(){
Some(binary_value)=>匹配binary_value.buf(){
一些(buf)=>{
普林顿(
“buf:{:?}”,
缓冲器
);
缓冲器
}
无=>{
返回Err(format_Err!(“需要my_binary_值”);
}
},
无=>{
返回错误(格式错误(
“二进制_值是必需的”
));
}
};
它在这一行感到恐慌:

let my_binary_value = match op.my_binary_value() {
我打印了二进制_值的值,它看起来正常(被截断):

以下是生成的flatbuffer代码:

#[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())
  }
#[内联]
发布fn buf(&self)->选项>>(二进制值::VT_buf,无)。映射(|v | v.safe_slice())
}

你知道我做错了什么吗?

我解决了这个问题,请看上面的评论。务必使用union字段在
…\u type
字段中输入正确的类型,因为该字段无法进行类型检查。

我解决了这个问题,请参见上面的注释。重要的是要确保联合字段在
…\u type
字段中输入正确的类型,因为这无法进行类型检查。

我投票以“不清楚”结束您的问题,因为坦率地说,提出任何建议的依据实在太少了;我们甚至不知道您开始使用的缓冲区是什么,那么我们如何帮助调试不匹配的长度/越界错误呢?考虑进一步改进你的问题和代码,下次我会更加努力。我确实找到了它,我有一个
联合
,我在
字段中错误地输入了错误的类型。我投票以“不清楚”结束你的问题,因为坦率地说,提出任何建议的依据实在太少了;我们甚至不知道您开始使用的缓冲区是什么,那么我们如何帮助调试不匹配的长度/越界错误呢?考虑进一步改进你的问题和代码,下次我会更加努力。我确实找到了它,我有一个
联合
,我在
字段中错误地输入了错误的类型。
#[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())
  }