我是 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。 "
那么,我哪里做错了,我怎样才能做得更好?
感谢您的建议。
编辑:缩短代码...
最佳答案
我在 Debug 模式下遇到了同样的问题,但它在 Release 模式下有效。
经过几个小时的研究,我设法通过 libfreenect2 项目上的编译标志(调试设置)解决了这个问题。
The freenect2 project was marked as
Multi-threaded DLL (/MD)
and if you change it toMulti-threaded Debug DLL (/MDd)
it should work.
在 VS2015 中,您可以访问此属性:
Project Properties -> C/C++ -> Code Generation ->Runtime Library
关于c++ - 使用 libfreenect2 的读/写访问冲突 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40026396/