1

我是 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。”

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

谢谢你的建议。

编辑:缩短代码...

4

1 回答 1

0

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

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

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

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

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

于 2017-07-05T11:20:33.367 回答