Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
1

Непонятное поведение программы

29.03.2015, 17:38. Показов 1169. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу статическую либу. В ней есть кусок кода, который уходит в рекурсию.. Только причины мне непонятны.. Вот кусок кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    std::string video;
    DWORD deviceNum = 0;
    DISPLAY_DEVICEA displayDevice;
    DEVMODEA devMode;
 
    memset(&displayDevice, 0, sizeof(displayDevice));
    displayDevice.cb = sizeof(DISPLAY_DEVICE);
 
    while(EnumDisplayDevicesA(NULL, deviceNum, &displayDevice, 0))
    {
        EnumDisplaySettingsA(displayDevice.DeviceName, ENUM_CURRENT_SETTINGS, &devMode);
        ++deviceNum;
        video+= std::string(displayDevice.DeviceName) + std::string(displayDevice.DeviceString) +
                std::string(displayDevice.DeviceID) + std::string(displayDevice.DeviceKey);
    }
После выполнения функции EnumDisplayDevicesA переменная deviceNum обнуляется. Пробовал использовать указатель (чисто из интереса) и в функцию передавать разименованный указатель - но после вызова функции EnumDisplayDevicesA значение указателя устанавливается в 0x00000000. Что это за бред?) Раньше собирал mingw, сейчас студийным компилятором - но навряд ли в этом дело))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2015, 17:38
Ответы с готовыми решениями:

Непонятное поведение программы
Доброго времени суток. Уважаемые форумчане, очень нуждаюсь в вашей консультации насчёт своей...

Непонятное поведение программы
Привет народ, вот кароч: #include"stdafx.h" #include"iostream" using namespace std; class calc{...

Непонятное поведение
Всем привет! В книге "Прата - Язык программирования C++. Лекции и управжения 2011" нашёл вот такой...

Непонятное поведение функтора
Почему-то не считается произведение 1 и 6 ... #include <iostream> #include <algorithm>...

3
18965 / 9911 / 2422
Регистрация: 30.01.2014
Сообщений: 17,401
29.03.2015, 17:44 2
Лучший ответ Сообщение было отмечено ArmanPrestige как решение

Решение

ArmanPrestige, у тебя в настройках проекта UNICODE включен? Если да, то ты размер ему неверный сообщаешь.
Вот тут:
Цитата Сообщение от ArmanPrestige Посмотреть сообщение
C++
1
displayDevice.cb = sizeof(DISPLAY_DEVICE);
На самом деле будет значить
C++
1
displayDevice.cb = sizeof(DISPLAY_DEVICEW);
Попробуй явно указать
C++
1
displayDevice.cb = sizeof(DISPLAY_DEVICEA);
1
Pied Piper
236 / 227 / 57
Регистрация: 15.01.2013
Сообщений: 855
29.03.2015, 18:05  [ТС] 3
DrOffset, про character set даже не думал.. спасибо, вы сохранили мне кучу нервов!
0
18965 / 9911 / 2422
Регистрация: 30.01.2014
Сообщений: 17,401
29.03.2015, 18:09 4
Цитата Сообщение от ArmanPrestige Посмотреть сообщение
про character set даже не думал..
Ну так размер-то структуры другой совсем получается Больше гораздо. wchar_t - 2 байта в windows (см. описание структуры DISPLAY_DEVICE, там внутри массивы символов), вот и получалось, что функция EnumDisplayDevices внутри ориентируется на размер больше, чем есть на самом деле, и перетирает часть "чужой" стековой памяти, где, в том числе, располагалась твоя переменная deviceNum.
1
29.03.2015, 18:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2015, 18:09
Помогаю со студенческими работами здесь

Непонятное поведение функции
Есть некоторый метод класса: int mustAttack(Chess &chess, Player& p1, Player& p2, int...

Непонятное поведение rvalue/lvalue
Всем привет, объясните, пожалуйста, немного про р-вэлью и л-вэлью в этом коде: #include <iostream>...

непонятное поведение метода getline
Всем привет. Прошу помощи, так как не могу понять логику поведения в работе метода...

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


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

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

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