我修改了一个用 C++ 编写的 Kinect 示例,新代码将检索骨架和颜色数据,而原始代码仅获取骨架数据。我意识到代码无法调用我为了处理颜色数据而实现的 ProcessColor 方法。当我仔细检查问题时,我看到以下部分(属于 init 函数)的指示行失败。在调试过程中,当我来到该行时,程序会跳转到 ProcessColor 方法,随后会出错。
if(NULL!=kinectSensor)
{
// line that fails is the following
hr = kinectSensor->NuiInitialize(NUI_INITIALIZE_FLAG_USES_COLOR);
if (SUCCEEDED(hr))
{
// Create an event that will be signaled when color data is available
m_hNextColorFrameEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
// Open a color image stream to receive color frames
hr = kinectSensor->NuiImageStreamOpen(
NUI_IMAGE_TYPE_COLOR,
NUI_IMAGE_RESOLUTION_640x480,
0,
2,
m_hNextColorFrameEvent,
&m_pColorStreamHandle);
}
}
下面我指出了它跳转的行:
HRESULT hr;
NUI_IMAGE_FRAME imageFrame;
HANDLE m_hNextColorFrameEvent(INVALID_HANDLE_VALUE), m_pColorStreamHandle(INVALID_HANDLE_VALUE);
// Line that it jumps
hr = kinectSensor->NuiImageStreamGetNextFrame(m_pColorStreamHandle, 0, &imageFrame);
错误消息如下:
KinectSample.exe 中 0x5ca5b4a6 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000047。
如果有帮助,我想指出我从官方 Kinect 示例(ColorBasics-D2D)中添加了上面显示的部分,并且可能存在冲突或其他什么,尽管我在此过程中非常小心。
我该如何解决?有什么想法吗?