2011-12-10 7 views
-4

BufferOutを16要素配列として定義しました。変数をスタックすると破損します。なぜこれが起こるのですか?

しかし、デバッグ中にこのメッセージが表示されます。

Run-Time Check Failure #2 - Stack around the variable 'BufferOut' was corrupted.

HIDBufferOutBufferOut 16素子バッファである場合には、有効なインデックスは0、...、15である。これは、ということを意味charアレイ

HIDBufferOut BufferOut; // first element is the report ID 
    BufferOut[0] = 0; 
    BufferOut[1] = 211; 
    BufferOut[16] = 44; 
    BufferOut[4] = 4; 

    . 
    . 
    . 
    . 
    etc 
+2

エラーメッセージは十分説明的です。もしあなたがそれを理解できなければ、どちらもソースコードを見ることができません。 – ybungalobill

+0

'HIDBufferOut BufferOut; \t \t \t \t //最初の要素は、レポートIDである \t \t BUFFEROUT [0] = 0; \t \t BufferOut [1] = Marker(); \t \t BufferOut [16] =(int)44; \t \t BufferOut [4] = typ; ' –

+3

配列の17番目の要素を挿入しているためです –

答えて

2

の16の要素である:

BufferOut[16] = (int) 44; 

は、メモリの破損の原因となるアレイの範囲外への書き込みを行います。

+0

私は17要素でそれを定義しようとしましたが、問題は同じです –

+1

どこで配列を作成しますか?上記のコードでは表示されません。 – Bart

+2

@ user1091216:もしそうなら、あなたはまだ十分な情報を与えていません。 – ybungalobill

0

が、これは通常、あなたは、バッファオーバーフローを引き起こし、あなたの手の届かないところだ場所に書き込む際に発生し、あなたのコードのこの部分から明らかなよう汚職をスタックしてもよいです: BufferOut [16] =(int)44; // 17番目の場所に範囲外を書き込んでいます

+0

配列サイズを17の要素に変更します。それでも問題が解決しない場合は、クリーンで新しく作成したプロジェクトを最初からビルドするときに役立ちます。 –

関連する問題