2016-10-13 14 views
1

Я новичок на C++ и начал обманывать своих Kinect V2 и libfreenect2. Похоже, здание библиотеки прекрасно работало для меня. Но когда я пытаюсь использовать его в своем коде, я получаю некоторые странные исключения.нарушение прав на чтение и запись C++ с использованием libfreenect2

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

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

Everytime я запускаю этот код, он не в получении серийного номера [серийный = 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 (кадры)] со следующим выброшенным исключением:

" Исключения брошенного в 0x000000018026D0C2 (ig75icd64.dll) в ConsoleApplication1.exe: 0xC0000005: место записи нарушения доступа 0x000000002BA0D700. «

Итак, что я делаю неправильно и как я могу сделать это лучше?

Спасибо за ваш совет.

Edit: укороченный код ...

+1

Правильный инструмент для решения таких проблем, это ВАШ отладчик. Перед тем, как просить о переполнении стека, вы должны пропустить свой код по очереди *. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны \ [изменить] ваш вопрос, чтобы включить пример [Минимальный, полный и проверенный] (http://stackoverflow.com/help/mcve), который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчик. –

+0

'0xC0000005' подсказки о неинициализированном указателе были разыменованы. –

+0

Ну, я не новичок в программировании. Я знаю, как использовать отладчик. И да, я думаю, что-то перепуталось с указателем. Но этого не происходит в моем коде. Это происходит в некоторых включенных файлах. Вот почему я задаю этот вопрос здесь ... – user3014569

ответ

0

Я сталкивается с той же проблемой на режиме отладки, но он работал на Release.

После нескольких часов исследования мне удалось решить проблему с помощью флага компиляции проекта libfreenect2 (в настройке отладки).

Проект freenect2 был отмечен как Multi-threaded DLL (/MD) и если изменить его Multi-threaded Debug DLL (/MDd) он должен работать.

В VS2015 Вы можете получить доступ к этой недвижимости на:

Свойства проекта -> C/C++ -> Генерация кода -> Runtime Library