Вставка местоположения записи о нарушении прав доступа в массив - PullRequest
0 голосов
/ 26 октября 2011

Я получаю ошибку нарушения доступа от отладчика, но я действительно не знаю, почему.Я подозреваю, что это было бы что-то действительно глупое.У меня есть массив записей каталога:

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 Ответ

3 голосов
/ 26 октября 2011

*bufferPosition++ не делает то, что вы думаете, что делает. Он разыменовывает bufferPosition, затем увеличивает указатель, а не значение, на которое указывает. Вы, вероятно, хотели (*bufferPosition)++, который увеличивает значение, на которое указывают.

Имейте в виду, неясно, почему вы передаете bufferPosition и bufferSize по адресу, поскольку они бесполезны для вызывающей стороны, поскольку ListDirectory освобождает данные, к которым относятся переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...