Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
1

Необработанное исключение. Нарушение прав доступа при чтении

17.01.2014, 17:59. Показов 2741. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Пишу привязку программы к конкретному компьютеру, и получаю информацию о железе через WMI, но при сохранении данных полученных от функции в строку типа string получаю ошибку "Необработанное исключение в "0x00ea1a42" в "universal.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
char wqlQuery(IWbemServices *pSvc, LPCWSTR pstrName, LPCWSTR pstrWmiclass)
{
IEnumWbemClassObject *pEnumerator = NULL;
pSvc->ExecQuery(_bstr_t(L"WQL"), _bstr_t(L"SELECT ")+_bstr_t(pstrName)+_bstr_t(L" FROM ")+_bstr_t(pstrWmiclass),
    WBEM_FLAG_FORWARD_ONLY|WBEM_FLAG_RETURN_IMMEDIATELY, NULL, &pEnumerator);
 
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
VARIANT vt;
VariantInit(&vt);
 
while(WBEM_S_NO_ERROR == pEnumerator->Next(WBEM_INFINITE, 1, &pclsObj, &uReturn))
    {
    pclsObj->Get(pstrName, 0, &vt, NULL, NULL);
    //wprintf(L"%s\n",  (vt.vt==VT_NULL)?L"<null>":vt.bstrVal);
 
    VariantClear(&vt);
    pclsObj->Release();
    }
 
pEnumerator->Release();
}
Вызов функции и сохранение параметров:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char* motherboard ()
    {   
        TCHAR resBuffer[MAX_PATH];
 
        CoInitializeEx(0, COINIT_MULTITHREADED);
        CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, NULL);
 
        IWbemLocator *pLoc = NULL;
        CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (LPVOID*)&pLoc);
        IWbemServices *pSvc = NULL;
        pLoc->ConnectServer(_bstr_t(L"root\\cimv2"), NULL, NULL, NULL, NULL, NULL, 0, &pSvc);
string resultates =(const char*) wqlQuery(pSvc, L"Version", L"Win32_Bios");//вот тут ошибка
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2014, 17:59
Ответы с готовыми решениями:

Необработанное исключение: Нарушение прав доступа при чтении
Работала с игрой &quot;Крестики-нолики&quot;. При компиляции выдает сообщение &quot;Необработанное исключение в...

Нарушение прав доступа при чтении по адресу
Почему-то жалуется на &quot;нарушение прав доступа при чтении по адресу 0x00000030.&quot; fun вызывается...

Вызвано необработанное исключение: нарушение доступа для чтения. lpnmhdr было nullptr
Ошибка в фрагменте (см.скрин) после нажатия на кнопку &quot;ждать 5 сек&quot;. Строки 183-191 из общего кода:...

Необработанное исключение, нарушение прав доступа при чтении
Необработанное исключение по адресу 0x0F5E4654 (msvcr120d.dll) в Проект1.exe: 0xC0000005: нарушение...

8
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
17.01.2014, 19:05 2
Сделайте проверку ошибок, тогда станет ясно, что и в каком месте происходит.
0
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
17.01.2014, 19:12  [ТС] 3
Цитата Сообщение от Убежденный Посмотреть сообщение
Сделайте проверку ошибок, тогда станет ясно, что и в каком месте происходит.
таки ошибка видна, она в 12 строчке, вопрос в том как ее исправить?
т.е. как присвоить значение возвращенное функцией строке типа char или string ?
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
17.01.2014, 19:22 4
Цитата Сообщение от Delvox Посмотреть сообщение
таки ошибка видна
Если нет проверки ошибок - код некорректен и его результаты непредсказуемы.
В приведенном примере есть как минимум семь мест, из-за которых может возникнуть
ошибка, и ни одно из них не контролируется.

Пальцем в небо: думаю, ошибка в этой строке:
C++
1
pSvc->ExecQuery
0
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
17.01.2014, 19:23  [ТС] 5
Цитата Сообщение от Убежденный Посмотреть сообщение
Если нет проверки ошибок - код некорректен и его результаты непредсказуемы.
В приведенном примере есть как минимум семь мест, из-за которых может возникнуть
ошибка, и ни одно из них не контролируется.

Пальцем в небо: думаю, ошибка в этой строке:
C++
1
pSvc->ExecQuery
как исправить мой недочет?
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
17.01.2014, 19:28 6
Ну представьте на секунду, что pLoc->ConnectServer по какой-то причине
завершается с ошибкой. В этом случае pSvc останется равным NULL.
Но этот факт игнорируется и pSvc передается аргументом в функцию
wqlQuery, где происходит попытка его разыменования - pSvc->ExecQuery.
В результате разыменования нулевого указателя программа валится:
"0xC0000005: Нарушение прав доступа при чтении "0x00000000".
Если Вы сделаете проверку возвращаемых значений, то будете точно
знать, какая функция завершилась неудачно и по какой причине (по
коду возврата, либо по GetLastError).
1
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
17.01.2014, 19:32  [ТС] 7
Цитата Сообщение от Убежденный Посмотреть сообщение
Ну представьте на секунду, что pLoc->ConnectServer по какой-то причине
завершается с ошибкой. В этом случае pSvc останется равным NULL.
Но этот факт игнорируется и pSvc передается аргументом в функцию
wqlQuery, где происходит попытка его разыменования - pSvc->ExecQuery.
В результате разыменования нулевого указателя программа валится:
"0xC0000005: Нарушение прав доступа при чтении "0x00000000".
Если Вы сделаете проверку возвращаемых значений, то будете точно
знать, какая функция завершилась неудачно и по какой причине (по
коду возврата, либо по GetLastError).
спасибо, пойду пытаться исправлять
0
Ушел с форума
Эксперт С++
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
17.01.2014, 19:35 8
Кстати, вот еще - в wqlQuery и motherboard отсутствует return.
И wqlQuery объявлена с возвращаемым типом char, а в motherboard
этот тип почему-то приводится к <const char *>, что бессмысленно.
0
7 / 7 / 1
Регистрация: 09.03.2013
Сообщений: 54
17.01.2014, 19:38  [ТС] 9
Цитата Сообщение от Убежденный Посмотреть сообщение
Кстати, вот еще - в wqlQuery и motherboard отсутствует return.
И wqlQuery объявлена с возвращаемым типом char, а в motherboard
этот тип почему-то приводится к <const char *>, что бессмысленно.
это отголоски моих незнаний и эксперементов с кодом, я добивался того чтобы присвоить строке полученные данные от функции. А потом уже использовать данные из этой строки для привязка программы.
0
17.01.2014, 19:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2014, 19:38
Помогаю со студенческими работами здесь

Необработанное исключение. Нарушение прав доступа при чтении
Ребят помогите. В общем есть программа, открывает один файл, ищет в нем последовательности,...

Необработанное исключение: 0xC0000005: Нарушение прав доступа при чтении
Программа складывает и вычитает матрицы произвольной размерности, читаемые ею с файла. На самом...

Необработанное исключение по адресу 0x008B94C5. 0xC0000005: нарушение прав доступа при чтении по
Здравствуйте! Функция должна искать локальные минимумы массива. То есть это элементы,которые меньше...

Необработанное исключение по адресу 0x00E730CD в ConsoleApplication18.exe: 0xC0000005: нарушение прав доступа при чтении
Задана целочисленная динамическая матрица M. Элементы этой матрицы, без остатка делящиеся на 6,...

Необработанное исключение по адресу 0x7798E43E (ntdll.dll) в bunkers.exe: 0xC0000005: нарушение прав доступа при чтении
прога вылетает на необработанном исключении.... на этих строчках message.addPart(&amp;content);...

Необработанное исключение: "Нарушение прав доступа при чтении"
При выполнении тестов {input...output} появляется необработанное исключение по адресу 0x009577E1 в...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru