2016-05-03 18 views
0

C++でKinect v2関連プロジェクトを使用していますが、機能外でデプスフレーム(BYTE *)を使用できません。文字列の文字を読み取る際にエラーが発生しました - アクセス違反エラーC++

これは最初の数分間はうまく動くと思います。

文字列

とアクセス違反エラーと時間のある時点でkinect20.dllのためにロードされていない記号の文字を読んでエラー:

は、それから私は、のようなエラーを得ました。

ここでは値を呼び出す方法を示します。

BYTE* bodyIndex = new BYTE[512*424]; // initialization 



HRESULT frameGet(){ 
//Initialization method if success 
    hr = pDepthFrame->AccessUnderlyingBuffer(&m_nDepthBufferSize, &bodyIndex); //Kinect dll method 
    prints(depth[300]); // Prints the value every time 
    return hr; 
} 

HRESULT getDepthFrame(){ 
    if frameGet is success 
    prints(bodyIndex[300]); // throws error reading character of string 
    return hr; 
} 

誰でもbodyIndexデータにいつでもアクセスできます。

完全なコードを投稿したときに応答が得られなかったので、ロジックがどのように必要なのですか?

妥当であると仮定すると、時にはkinectdllによって奥行きデータが浄化され、反映されます。

私はmemcpyでまだエラーがありました。

ありがとうございます。

+1

上記のコードで 'depth'はグローバル変数として宣言されていますか? – CinCout

+1

'pDepthFrame-> AccessUnderlyingBuffer(&m_nDepthBufferSize、&depth);' w.r.t [1] 'depth 'によるバッファポインタが' m_nDepthBufferSize'のサイズと関係があるかどうかを評価する必要があるかもしれません。また、 'm_nDepthBufferSize'で指定された制限値でバッファにアクセスしています。 [2]関数 'AccessUnderlyingBuffer'はバッファポインタを' depth'で埋めるか、 'm_nDepthBufferSize'にサイズを格納することでバッファにコピーされたデータのサイズを返します。 [3]深さは 'AccessUnderlyingBuffer'によって内部的に割り当てられますか?その場合、' m_nDepthBufferSize'で割り当てサイズを受け取ります。 – sameerkn

+0

@CinCoutはい深度はグローバルとして定義されます。 –

答えて

0

https://msdn.microsoft.com/en-us/library/microsoft.kinect.kinect.idepthframe.accessunderlyingbuffer.aspx

によると、あなたは、メモリを割り当てる必要はありません。

深度フレームデータへのポインタを取得します。

public: 
HRESULT AccessUnderlyingBuffer(
     UINT *capacity, 
     UINT16 **buffer 
) 

バッファ型:UINT16 [out]このメソッドが返されるが、深さフレームデータに ポインタを含む場合。

私が仕様を正しく理解している場合は、アクセスする前に常にAccessUnderlyingBuffer()に電話してください。

+0

はい、私が必要としているのはBodyIndexFrameです。間違い。 Byte *にはアクセスできません。 –

関連する問題