2011-10-25 56 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++; 

第一行產生一個異常。有人可以告訴我我做錯了什麼嗎?

編輯:的ListDirectory守則要求:http://pastebin.com/ScbcqX7p

+1

bufferPosition是一個有效的數字嗎?即它是否比bufferSize小? 此外,有dataFound已初始化? – NickLH

+0

是的,很抱歉在提問中沒有提及,我已將它添加到片段中。 –

+0

是的,它們是有效的數字。至於dataFound - 它確實有效,因爲我可以將內容打印到控制檯。 –

回答

3

*bufferPosition++沒有做什麼,你認爲它。它對bufferPosition解除引用,然後遞增指針,而不是指向的值。您可能需要(*bufferPosition)++,這會增加指向的值。

你要知道,目前還不清楚爲什麼你逝去的bufferPositionbufferSize的地址,因爲它們是無用的來電,因爲ListDirectory釋放該變量引用的數據。

+0

謝謝你指出。與傳遞地址一樣 - 我已經刪除了該函數中的錯誤處理以解除調用。我需要這樣,因爲我需要在函數外部使用數組。 –

+1

然後您還需要將更新的數組傳回給調用者。 –

+0

你能幫助一件事嗎? dirBuffer的分配保持不變,我只是在通過並修改代碼時添加了&運算符。 這是錯誤的: '(* dirBuffer)[* bufferPosition] .fileSizeLow = dataFound.nFileSizeLow;'? 因爲它仍然在做同樣的事情。 –