微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 NiTE 尝试从 OpenNI2 读取帧时会发生分段错误

如何解决为什么 NiTE 尝试从 OpenNI2 读取帧时会发生分段错误

我在 Rust 中尝试使用 NiTE 2.2 时遇到分段错误,尝试从 NiteCAPI.h 调用 nitereadUserTrackerFrame() 时出现分段错误。绑定是通过 rust-bindgen 使用以下命令生成的。

bindgen Nite.h -o NiTE.rs --whitelist-function nite.* --whitelist-type Nite.* --whitelist-var NITE_.* -- -x c++ -I../OpenNI2.2/Include

OpenNI 绑定是用...生成

bindgen OpenNI.h --whitelist-type Oni.* --whitelist-function Oni.* --whitelist-function oni.* -o OpenNI.rs --  -x c++

触发分段错误代码

pub struct nite_UserTracker {
    pub m_userTrackerHandle: *mut MaybeUninit<NiteUserTracker>
}

impl nite_UserTracker {
    pub fn readFrame(&mut self,pFrame:*mut nite_UserTrackerFrameRef) -> NiteStatus {
        let mut pNiteFrame:MaybeUninit<NiteUserTrackerFrame> = MaybeUninit::<NiteUserTrackerFrame>::uninit();
        let rc:NiteStatus = unsafe {niteReadUserTrackerFrame((*(self.m_userTrackerHandle)).as_mut_ptr(),pNiteFrame.as_mut_ptr() as *mut *mut NiteUserTrackerFrame)};
        unsafe {nite_UserTrackerFrameRef::setReference(&mut (*pFrame),(*(self.m_userTrackerHandle)).as_mut_ptr(),&mut (*pNiteFrame.as_mut_ptr()))}
        return rc;
    }
}

我认为这是一个与指向 pNiteFrame.as_mut_pointer() 的指针有关的错误,我的 gdb 输出低于

0x00007ffff76a88b0 in oni::implementation::VideoStream::getDevice() ()
   from /home/yashr/Documents/CoolKinectVrThingy/libs/NiTE-Linux-x64-2.2/Samples/Bin/libOpenNI2.so
(gdb) backtrace -full
#0  0x00007ffff76a88b0 in oni::implementation::VideoStream::getDevice() ()
   from /home/yashr/Documents/CoolKinectVrThingy/libs/NiTE-Linux-x64-2.2/Samples/Bin/libOpenNI2.so
No symbol table info available.
#1  0x00007ffff7697e61 in oni::implementation::Context::waitForStreams(_OniStream**,int,int*,int) ()
   from /home/yashr/Documents/CoolKinectVrThingy/libs/NiTE-Linux-x64-2.2/Samples/Bin/libOpenNI2.so
No symbol table info available.
#2  0x00007ffff7698027 in oni::implementation::Context::readFrame(_OniStream*,OniFrame**) ()
   from /home/yashr/Documents/CoolKinectVrThingy/libs/NiTE-Linux-x64-2.2/Samples/Bin/libOpenNI2.so
No symbol table info available.
#3  0x00007ffff79456ba in UserTracker::getNextFrame(NiteUserTrackerFrame**) ()
   from /home/yashr/Documents/CoolKinectVrThingy/libs/NiTE-Linux-x64-2.2/Samples/Bin/libNiTE2.so
No symbol table info available.
#4  0x000055555555d803 in CoolKinectVrThingy::NiTE::nite_UserTracker::readFrame
    (self=0x7fffffffce50,pFrame=0x7fffffffd2f8) at src/NiTE.rs:2101
        pNiteFrame = core::mem::maybe_uninit::MaybeUninit<CoolKinectVrThingy::NiTE::NiteUserTrackerFrame> {uninit: (),value: core::mem::manually_drop::ManuallyDrop<CoolKinectVrThingy::NiTE:--Type <RET> for more,q to quit,c to continue wi--Type <RET> for more,c to con--Type <RET> for more,c to--Type <RET> for more,c to continue without pagi--Type <RET> for more,c to continue without paging--Quit

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。