Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
4 / 3 / 6
Регистрация: 13.11.2015
Сообщений: 208
1

Краш при запуске

25.03.2016, 01:15. Просмотров 589. Ответов 6
Метки нет (Все метки)

Здравствуйте. После компиляции проекта появляется краш, с сообщением:
C++
1
Необработанное исключение по адресу 0x731AC9F1 в Anticheat.exe: 0xC0000005: нарушение прав доступа при исполнении по адресу 0x00000000.
Ошибка получается из-за этой функции:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void SearchCLEOFiles(char Path[512])
{
    char FindPath[512];
    char FindPath2[512];
    char File_name[1024];
    strcpy(FindPath, Path);
    strcat(FindPath, "\\*.*");
    WIN32_FIND_DATA FileData;
    HANDLE hSearch;
    BOOL fFinished = FALSE;
    hSearch = FindFirstFile(FindPath, &FileData);
    while (!fFinished)
    {
        strcpy(File_name, Path);
        strcat(File_name, "");
        strcat(File_name, FileData.cFileName);
        if (strstr(FileData.cFileName, ".cs") != NULL)// cout << File_name << endl;
        {
            TMD5 MD5;
            DWORD dwSize;
            GetMD5* md5 = NULL;
 
            LPVOID pFile = md5->MapFile_ReadOnly(TEXT(File_name), dwSize);
            MD5 = md5->getMD5(PUCHAR(pFile), dwSize);
            UnmapViewOfFile(pFile);
 
            cout << "Обнаружен файл " << File_name << ", его MD5: " << MD5.hash << endl << endl;
            return;
        }
        if (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if (strlen(FileData.cFileName)>2)
            {
                strcpy(FindPath2, Path);
                strcat(FindPath2, "");
                strcat(FindPath2, FileData.cFileName);
                SearchCLEOFiles(FindPath2);
            }
        }
        if (!FindNextFile(hSearch, &FileData)) if (GetLastError() == ERROR_NO_MORE_FILES) fFinished = TRUE;
    }
    FindClose(hSearch);
};

, а именно после " if (strstr(FileData.cFileName, ".cs") != NULL) ". Пробовал в "TEXT(File_name)" ставить и полный путь файла + расширение, и только файл + расширение, но всеравно никак. Помогите исправить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2016, 01:15
Ответы с готовыми решениями:

Краш при запуске
Здраствуйте. При выполнении ехе файла происходит краш, хотя в студии все нормально...

Краш при получении расширения файла
пишу поиск файлов по определенным расширениям. ВАЖНО: пишу без зависимости CRT, поэтому предлагать...

Краш при освобождении памяти через HeapFree()
написал этот код, который находит расширение файла. LPWSTR findExtension(LPCWSTR fileName) {...

При запуске Subnautica происходит краш
При запуске subnautica появляется ошибка Ooops в которой написано: &quot; The game crashed. The crash...

6
С чаем беда...
Эксперт CЭксперт С++
7766 / 3735 / 1023
Регистрация: 18.10.2014
Сообщений: 7,854
25.03.2016, 01:21 2
Цитата Сообщение от Vasiliyy Посмотреть сообщение
C++
1
2
GetMD5* md5 = NULL;
LPVOID pFile = md5->MapFile_ReadOnly(TEXT(File_name), dwSize);
Так а что это за белиберда? Доступ через null-указатель?
0
4 / 3 / 6
Регистрация: 13.11.2015
Сообщений: 208
25.03.2016, 16:57  [ТС] 3
Я так сделал чтобы не было предупреждения "warning C4101: md5: неиспользованная локальная переменная". Сейчас убрал "= NULL", но всеравно краш идет.

Добавлено через 8 часов 34 минуты
Методом исключения я нашел строку, из-за которой получается такое - "MD5 = md5->getMD5(PUCHAR(pFile), dwSize)". При закрытии крашнутой программы в студии открывается файл с функцией:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TMD5 GetMD5::getMD5(PUCHAR Buffer, DWORD dwSize)
{
    const char HEX_CHAR_MAP[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    MD5_CTX context;
    TMD5 Result;
    MD5Init(&context);
 
    for (; dwSize >= 64; Buffer += 64, dwSize -= 64)
        MD5Update(&context, Buffer, 64);
    MD5Update(&context, Buffer, dwSize);
 
    MD5Final(&context);
 
    for (int i = 0; i<16; i++)
    {
        Result.hash[i * 2] = HEX_CHAR_MAP[context.digest[i] >> 4];
        Result.hash[i * 2 + 1] = HEX_CHAR_MAP[context.digest[i] & 15];
    }
    Result.hash[32] = NULL;
    memcpy(Result.digest, context.digest, 16);
    return Result;
}
, и указатель показывает на строке "for (; dwSize >= 64; Buffer += 64, dwSize -= 64)". Наверное тут проблема.
0
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
25.03.2016, 21:07 4
Цитата Сообщение от Vasiliyy Посмотреть сообщение
Я так сделал чтобы не было предупреждения "warning C4101: md5: неиспользованная локальная переменная". Сейчас убрал "= NULL", но всеравно краш идет.
Указатель md5 надо проинициализировать.

C++
1
GetMD5* md5 = new GetMD5();
В

C++
1
LPVOID pFile = md5->MapFile_ReadOnly(TEXT(File_name), dwSize);
dwSize передается по ссылке или по значению?
0
4 / 3 / 6
Регистрация: 13.11.2015
Сообщений: 208
25.03.2016, 23:53  [ТС] 5
Alex xelA,
В
C++
1
LPVOID pFile = md5->MapFile_ReadOnly(TEXT(File_name), dwSize);
dwSize передается по ссылке или по значению?
dwSize есть выше этой строки - "DWORD dwSize;", и передается в другую функцию:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
LPVOID GetMD5::MapFile_ReadOnly(LPCTSTR lpFileName, DWORD &dwSize)
{
    dwSize = 0;
    HANDLE hFile = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hFile == INVALID_HANDLE_VALUE) return NULL;
    if (dwSize == 0) dwSize = GetFileSize(hFile, NULL);
    if (dwSize == 0)
    {
        CloseHandle(hFile);
        return NULL;
    }
    HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, dwSize, NULL);
    CloseHandle(hFile);
    if (hFileMap == NULL) return NULL;
    LPVOID lpMap = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, dwSize);
    CloseHandle(hFileMap);
    return lpMap;
}
0
100 / 38 / 20
Регистрация: 27.02.2016
Сообщений: 135
26.03.2016, 12:50 6
Скорее всего вы рано закрываете хендлы объектов. Попробуйте поменять эту функцию так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
LPVOID GetMD5::MapFile_ReadOnly(LPCTSTR lpFileName, DWORD &dwSize, HANDLE& _Mapping, HANDLE& _File)
{
    dwSize = 0;
_Mapping = 0;
_File = 0;
    _File = CreateFile(lpFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (_File == INVALID_HANDLE_VALUE) { _File = 0; return NULL; }
    if (dwSize == 0) dwSize = GetFileSize(_File, NULL);
    if (dwSize == 0)
    {
        CloseHandle(_File);
_File = 0;
        return NULL;
    }
    _Mapping = CreateFileMapping(_File, NULL, PAGE_READONLY, 0, dwSize, NULL);
    if (_Mapping == NULL) { CloseHandle(_File); _File = 0; return NULL; }
    return MapViewOfFile(_Mapping, FILE_MAP_READ, 0, 0, dwSize);
}
Вместо UnmapViewOfFile:

C++
1
2
3
4
5
6
7
8
9
10
11
VOID GetMD5::UnmapFile(void* _Map, HANDLE _Mapping, HANDLE _File)
{
    if (_Map)
UnmapViewOfFile(_Map);
 
if (_Mapping)
CloseHandle(_Mapping);
 
if (_File)
CloseHandle(_File);
}
В конце

C++
1
2
3
4
HANDLE hfile = 0, hmap = 0;
LPVOID pFile = md5->MapFile_ReadOnly(TEXT(File_name), dwSize, hmap, hfile);
            if (pFile) MD5 = md5->getMD5(PUCHAR(pFile), dwSize);
            md5->UnmapFile(pFile, hmap, hfile);
Не проверял, но должно работать.
1
4 / 3 / 6
Регистрация: 13.11.2015
Сообщений: 208
26.03.2016, 13:03  [ТС] 7
Alex xelA, нет, при выполнении всеравно краш идет.(
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2016, 13:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Краш при запуске игры с платформой 86_64 на Windows 7 x86
Приветствую! Столкнулся с проблемой при сборке игры на PC. Данные: Windows 7. x86 exe файл...

Краш "Лисички" (Mazilla) при запуске.
Посоветовали обратиться к реестру, а именно HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows...

При запуске из среды программа работает, при запуске выполняемого файла выдает ошибку
Добавлено через 1 минуту 35 секунд как исправить ошибки в названии темы? там должно было быть...

Файл при запуске по двойному щелчку мыши не работает как при запуске в терминале
Есть текстовый файл Goodgame.sh с таким кодом: xclip -o &gt; clipboard.txt...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.