2011-10-25 72 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;'? 因为它仍然在做同样的事情。 –