我是一个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 = 0xffffffffffffffffff。"
如果我使用
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。"
那么,我做错了什么,我怎样才能做得更好?
谢谢你的建议。
编辑:缩短代码…
我在调试模式下面临同样的问题,但它在发布上工作。
经过几个小时的研究,我已经设法通过在libfreenect2项目上的编译标志(在调试设置上)解决了这个问题。
freenect2项目标记为
Multi-threaded DLL (/MD)
和if你把它改为Multi-threaded Debug DLL (/MDd)
,它应该工作。
在VS2015中,你可以访问这个属性:
项目属性-> C/c++ ->代码生成->运行库