Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при определении размера структуры, ошибку выдает дебаггер 
:(
    Опции темы
BBulat
Дата 10.10.2007, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 5.12.2006

Репутация: нет
Всего: нет



Пытаюсь отладить программу, которая открывает устройство для записи и чтения:
Код

//Определение символического имени устройства
HDEVINFO hDevInfo;
PSP_DEVICE_INTERFACE_DATA devInfoData = new SP_DEVICE_INTERFACE_DATA;
        
// {36fc9e60-c465-11cf-8056-444553540000}
GUID Nguid = { 0x36fc9e60, 0xc465, 0x11cf, { 0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00 } };
GUID *guid = &Nguid;        
        
hDevInfo = SetupDiGetClassDevs (guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); //Мы попросили вернуть 
                                                                    //нам описатель для устройств, предоставляющих интерфейс 
                                                                    //с guid и присутствующих в данный момент в системе
        
//получаем краткую информацию для интерфейсов (в данном случае, для первого интерфейса в списке с подходящим guid)
devInfoData->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
SetupDiEnumDeviceInterfaces(hDevInfo, NULL, guid, 0, devInfoData);
        
//Определим необходимую для хранения символического имени устройства длину буфера
unsigned long requiredlength;
SetupDiGetInterfaceDeviceDetail (hDevInfo, devInfoData, NULL, 0, &requiredlength, NULL); 
            
//Узнаем символическое имя для устройства с заданным интерфейсом
PSP_DEVICE_INTERFACE_DETAIL_DATA DevInfoDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredlength);
        
DevInfoDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);       // ТУТ ОШИБКА 
        
SetupDiGetInterfaceDeviceDetail (hDevInfo, devInfoData, DevInfoDetail, requiredlength, &requiredlength, NULL);    

//открытие порта
HANDLE DevHandle = CreateFile(DevInfoDetail->DevicePath,
                             GENERIC_READ | GENERIC_WRITE,
                0,
                NULL,
                OPEN_EXISTING,
                0,
                NULL);
//проверка результата
if (DevHandle == INVALID_HANDLE_VALUE) {pDoc->StringData1 = "Ошибка открытия порта";}
    else {pDoc->StringData1 = "Порт открыт успешно";}
            
delete devInfoData;


Дебаггер показывает, что ошибка в строке " DevInfoDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);  " и выдает следущее сообщение: Unhandled exception at 0x0041830c in mms_2.exe: 0xC0000005: Access violation writing location 0x00000000.

Не может определить размер структуры DevInfoDetail, но почему непонятно, вроде все правильно делаю.

Заранее благодарен!


PM MAIL   Вверх
zkv
Дата 10.10.2007, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 12
Всего: 92



Цитата(BBulat @  10.10.2007,  06:56 Найти цитируемый пост)
Не может определить размер структуры DevInfoDetail

дело не в этом, а в том, что память под DevInfoDetail не была выделена. Размер структуры еще при компиляции выясняется.
проверяй, что в requiredlength лежит перед вызовом 
PSP_DEVICE_INTERFACE_DETAIL_DATA DevInfoDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredlength);

PS плохой стиль то new то malloc  используешь, определись с чем-нибудь одним  smile 
PM MAIL   Вверх
BBulat
Дата 15.10.2007, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 5.12.2006

Репутация: нет
Всего: нет



Действительно, malloc(requiredlength) возвращает 0 (22 строка моего кода). Но функции SetupDiGetInterfaceDeviceDetail (19 строка) и SetupDiEnumDeviceInterfaces (15 строка) также возвращают 0. Функция SetupDiGetClassDevs (9 строка) ошибок не выдает, т.е. проблема, я так думаю, в строке 14, хотя там вроде все правильно или с определением guid что-то попутал...
Ошибка может возникнуть из=за того, что устройство не подключено или проблема в другом? 

Заранее благодарен!
PM MAIL   Вверх
Nastya
Дата 15.10.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 3
Всего: 44



Сорри не читала внимательно код. Но у выс не где не использовалась #pragma pack ?


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
BBulat
Дата 15.10.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 5.12.2006

Репутация: нет
Всего: нет



нет не используется, а что надо? если да, то как точно надо это написать?
PM MAIL   Вверх
Nastya
Дата 15.10.2007, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

Репутация: 3
Всего: 44



BBulat, Нет не надо smile Просто этовещь при помощи которой меняются границы выравнивания структур. и может оказаться что в одном месте они одни в другом другие.



--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
BBulat
Дата 16.10.2007, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 5.12.2006

Репутация: нет
Всего: нет



Извините, что снова поднял тему, но я так и не смог решить проблемы описанные выше (см. третье сообщение этой темы)

Заранее благодарен!
PM MAIL   Вверх
Fazil6
Дата 16.10.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: нет
Всего: 60



Цитата(BBulat @  16.10.2007,  04:49 Найти цитируемый пост)
Извините, что снова поднял тему, но я так и не смог решить проблемы описанные выше (см. третье сообщение этой темы)Заранее благодарен!

непонятно чего ты хочешь...

Цитата(BBulat @  15.10.2007,  07:27 Найти цитируемый пост)
Действительно, malloc(requiredlength) возвращает 0 (22 строка моего кода).

в этом вся проблема. Ты проинициализировал 
Код

PSP_DEVICE_INTERFACE_DETAIL_DATA DevInfoDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredlength);

нулем и потом
Код

DevInfoDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);       // ТУТ ОШИБКА 

ты тут разыменовываешь нулевой указатель. Об этом и говорит тебе 
Цитата

Unhandled exception at 0x0041830c in mms_2.exe: 0xC0000005: Access violation writing location 0x00000000.

твой DevInfoDetail не указывает ни на какой объект

Это сообщение отредактировал(а) Fazil6 - 16.10.2007, 11:21
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0653 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.