С C++ я получаю указатель с 0xcdcdcdcd при создании класса - что происходит?
----------------РЕДАКТИРОВАТЬ-----------------------
Я взял неправильное значение для сравнения, cdcdcdcd откуда-то пришел. У меня все еще есть свои методы, генерирующие исключения прежде, чем они будут достигнуты, но моя проблема заключается в другом месте, я хотел бы, чтобы был способ просто "отменить" мой первоначальный вопрос. Спасибо за помощь.
----------------РЕДАКТИРОВАТЬ-----------------------
У меня есть класс (MyClass), который я унаследовал от некоторого стороннего класса (который, в свою очередь, является производным от классов прямого показа - от CBaseFilter, если это имеет значение). Я пишу этот код:
MyClass* val = NULL;
val = new MyClass(); // Create an instance of the class.
Попытка сделать вызов метода приводит к исключению. Немного потухнув, я обнаружил, что когда я разыменовываю val (сам val кажется действительным... что-то вроде 0x0777fc90), он содержит 0xcdcdcdcd. Я оглянулся вокруг, и кажется, что это может указывать на то, что память была выделена в куче, но не инициализирована.
Что это значит?! Как можно вызвать вызов new успешно (val!= NULL), и все же память недостаточно инициализирована, чтобы иметь указатель на нее? Возможно ли, что что-то пошло не так с некоторой инициализацией базового класса? И если так - что я ищу?
1 ответ
0xCDCDCDCD - это значение отладки, которое исходит из недр библиотеки времени выполнения C. Когда вы выделяете блок памяти в отладочной сборке, он инициализируется этим ложным значением в надежде обнаружить ошибки. 0xCDCDCDCD не NULL и никогда не является действительным указателем памяти.
Есть ли HRESULT, который проходит через DirectShow, который вы можете проверить?
Попробуйте вызвать функцию WINAPI GetLastError() и посмотрите, что это показывает.