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())
}