2011-10-25 7 views
0

デバッガからアクセス違反エラーが発生していますが、なぜそのような理由がわかりません。私はそれが本当にばかげた何かになるだろうと思う。 私は、ディレクトリエントリの配列を持っている:アレイへのアクセス違反書込み場所の挿入

typedef struct dirEntry{ 
    TCHAR fileName[MAX_PATH]; 
    DWORD fileSizeLow; 
    DWORD fileSizeHigh; 
} dirEntry; 

DWORD bufferSize = MEM_SIZE; //MEM_SIZE = 100 
DWORD bufferPosition = 0; 
dirEntry* dirBuffer; 

dirBuffer = (dirEntry*) malloc(bufferSize*sizeof(dirEntry)); 

その後、私は、私は内部のファイルに関する情報を取得するが、私はこれを呼び出すときに、関数の内部で関数にListDirectory(_T("D:\\books\\*"), dirBuffer, &bufferSize, &bufferPosition)

を渡し:

dirBuffer[*bufferPosition].fileSizeLow = dataFound.nFileSizeLow; 
_tcscpy(dirBuffer[*bufferPosition].fileName, dataFound.cFileName); 
*bufferPosition++; 

最初の行は例外を生成します。誰かが私が間違っていることを教えてもらえますか?

EDIT:要求としてListDirectoryコード:

+1

bufferPositionは有効な数字ですか?私。それはbufferSizeより小さいですか? また、dataFoundは初期化されていますか? – NickLH

+0

はい、申し訳ありませんが、私はそれをスニペットに追加しました。 –

+0

はい、有効な数字です。 dataFoundについては、コンテンツをコンソールに出力できるので、実際には有効です。 –

答えて

3

*bufferPosition++http://pastebin.com/ScbcqX7pあなたはそれがないと思う何をしません。それはbufferPositionを逆参照し、次にポイントされた値ではなくポインタをインクリメントします。おそらく(*bufferPosition)++が必要になります。これは、ポイント先の値をインクリメントします。あなたがアドレスでbufferPositionbufferSizeを渡しているなぜ彼らは、発信者に無用なのでListDirectoryは、変数が参照するデータを解放しますので、

マインドあなたは、それは、はっきりしていません。

+0

それを指摘してくれてありがとう。アドレス渡しの場合と同様に、関数内のエラー処理から解放された呼び出しを削除しました。関数の外側で配列を操作する必要があるため、このようにする必要があります。 –

+1

さらに、更新された配列を呼び出し元に渡す必要があります。 –

+0

もう1つ手伝ってもらえますか? dirBufferの割り当ては同じですが、渡すときに&演算子を追加してコードを変更しました。 これは間違っていますか? '(* dirBuffer)[* bufferPosition] .fileSizeLow = dataFound.nFileSizeLow;'? これはまだ同じことをしているからです。 –

関連する問題