【发布时间】:2011-10-25 23:28:29
【问题描述】:
我从调试器收到访问冲突错误,但我真的不知道为什么。我怀疑这将是一件非常愚蠢的事情。 我有一个目录条目数组:
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
【问题讨论】:
-
bufferPosition 是一个有效数字吗? IE。它比bufferSize小吗?另外,dataFound 是否已初始化?
-
是的,很抱歉没有在问题中提及,我已将其添加到 sn-p。
-
是的,它们是有效数字。至于 dataFound - 它确实有效,因为我可以将内容打印到控制台。
-
也许
ListDirectory的代码会有所帮助 -
如果发生错误,您释放在调用函数外部分配的缓冲区。不要那样做。此外,如果发生这种情况并且你再次调用
ListDirectory(为什么你有realloc?)它会在崩溃的地方崩溃。