Вчерая столкнулся вот с такой вот проблемой. Есть класс, в котором постоянно происходит чтение-запись реестра. Так вот где-то на пред. «итерации» разработки все было отлично (по другому никак – код тривиальный и уже отлаженный на сто раз). Но после того, как я добавил несколько функций-членов в класс (никак не связанных между собой ни переменными, ни вызовами) – этот метод вдруг перестал работать. Вот как все обстояло: в глоб. (назовём её так) функции создавался дескриптор ключа, а потом другая функция его использовала каждый раз. Так вот – при чтении одного параметра все было ок, а при чтении другого – нет. Win32 API функция RegQueryValueEx возвращала ок, а в в выходном значении (тип параметра) – была какая-то белиберда. Что я только не пробовал – перекомпоновка/перелопачивание не помогло; замена идентификаторов переменных – тоже. Спасло только постоянное открытие-закрытие дескриптора внутри ф-ии. Но ведь это же не избавляет меня от «недопонимания».
Вторая проблема: в моём классе были виртуальные функции, которые обрабатывали события от пользователя. Все было ок, а теперь одна из них вообще не вызывается. И это при том, что код предка класса и код этих функций я вообще никак не мог затронуть!!! Просто смешно.
Расскажу ещё: писал свой связанный список, возникла «плавающая» проблема: иногда указатель вдруг принимал непонятно откуда взявшееся «фантомное» значение! И это при том, что смена его идентификатора ничего также не дала. Какой-то странный баг. Проверил всё: от конструктора копирования до ветвлений
Есть и ещё одно: в дебаге передаю указатель на CDC в польз. Функцию. Все работате. Но как релиз – указателя как не бывало Ж-) Вероятность того, что это всё МОИ косяки – велика, ибо я не считаю себя даже программером «ниже среднего», но ведь 1 проблема явно не моя!
Ну а вот сегодня ещё!!! В той же самой проге, где все косячет (видно косячет все и сразу не просто так!) появилась ещё одна проблема. Функция, которая проверяет привелегии пользователя. Так вот – отдельно (в отдельном простеньком консольном приложении) все работает правильно, а здесь – метод выдает неверный результат!!! Могут ли все эти проблемы возникнуть из-за различных способов компоновки памяти (т.е. у меня много статических методов и переменных, а также виртуальных итд). Статика нужна для простоты работы с потоками, ведь мой класс больше является namespace-хранителем, т.е. создание множества инстанций не предполагается. Но делать все методы статическими как-то мне претит, использую reinterpret_cast.