【问题标题】:read/write access violation c++ using libfreenect2使用 libfreenect2 的读/写访问冲突 C++
【发布时间】:2017-02-22 21:30:27
【问题描述】:

我是 C++ 新手,开始使用我的 Kinect V2 和 libfreenect2。 我想,图书馆的建设对我来说很好。但是当我尝试在我的代码中使用它时,我得到了一些奇怪的异常。

Freenect2 freenect2;
std::string serial="";
Freenect2Device *dev = 0;

freenect2.enumerateDevices();
serial = freenect2.getDefaultDeviceSerialNumber();
dev = freenect2.openDevice(serial);

每次我运行此代码时,它都无法获取序列号 [serial = freenect2.getDefaultDeviceSerialNumber();]:

“抛出未处理的异常:读取访问冲突。

_Pnext 是 0xFFFFFFFFFFFFFFFF。”

如果我正在使用

Freenect2 freenect2;
Freenect2Device *dev = 0;
SyncMultiFrameListener listener(Frame::Color);
FrameMap frames;

freenect2.enumerateDevices();
dev = freenect2.openDefaultDevice();
dev->setColorFrameListener(&listener);
dev->start();

listener.waitForNewFrame(frames)

相反,它在等待新帧 [listener.waitForNewFrame(frames)] 时失败,并引发以下异常:

" 在 ConsoleApplication1.exe 中的 0x000000018026D0C2 (ig75icd64.dll) 处引发异常:0xC0000005:访问冲突写入位置 0x000000002BA0D700。 "

那么,我做错了什么,我怎样才能做得更好?

感谢您的建议。

编辑:缩短了代码...

【问题讨论】:

  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 0xC0000005 提示取消引用未初始化的指针。
  • 虽然我对编程并不陌生。我知道如何使用调试器。是的,我猜指针有问题。但它不会发生在我的代码中。它发生在一些包含的文件中。这就是为什么我在这里问这个问题......
  • 很高兴知道您知道如何使用调试器。您是否在单步执行代码时检查了此语句 dev = freenect2.openDefaultDevice(); 的结果?如前所述,请发minimal reproducible example。否则,任何人都不太可能诊断出您的问题。
  • 是的,我做到了。在第一个代码 sn-p 中,它甚至在用数据填充“dev”之前就无法获取序列号。在第二个 sn-p 'dev' 中,我猜是正确的数据。

标签: c++ kinect-v2 libfreenect2


【解决方案1】:

我在调试模式下遇到了同样的问题,但它在发布时工作。

经过几个小时的研究,我设法通过 libfreenect2 项目上的编译标志(在调试设置中)解决了这个问题。

freenect2 项目被标记为Multi-threaded DLL (/MD),如果 你把它改成Multi-threaded Debug DLL (/MDd)它应该可以工作。

在 VS2015 中,您可以在以下位置访问此属性:

项目属性 -> C/C++ -> 代码生成 ->运行时库

【讨论】:

    猜你喜欢
    • 2023-01-13
    • 2021-02-16
    • 2014-02-10
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多