使用libfreenect2读/写访问冲突c ++

时间:2016-10-13 16:30:01

标签: c++ kinect-v2 libfreenect2

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

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

感谢您的建议。

编辑:缩短了代码...

1 个答案:

答案 0 :(得分:0)

我在调试模式下面临同样的问题,但它在Release上有效。

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

  

freenect2项目标记为Multi-threaded DLL (/MD),如果   你把它改成Multi-threaded Debug DLL (/MDd)它应该有效。

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

  

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