#c
#c
Вопрос:
Мы получаем эту ошибку:
switch(type) { case genericNode::GROUP_ID: groupIdNode* temp; *temp= groupIdNode(key); return temp;
хотел бы получить некоторую помощь, чтобы попытаться решить эту проблему. спасибо 🙂
Комментарии:
1.
temp
это указатель, который никогда не присваивается, но вы разыменовываете его в lhs назначения. Использование любого элемента объекта с помощью неинициализированного указателя является неопределенным поведением. Оператор присваивания является участником…
Ответ №1:
temp
является указателем на объект типа groupIdNode
. Его значение не инициализировано. Там нет никакого заявления temp = something
.
*temp=groupIdNode(key);
копирует возвращаемое значение groupIdNode
в объект, на который указывает by temp
. *temp
принимает значение указателя (не инициализированного), разыменовывает его и присваивает ему возвращаемое значение.
… что приведет к нарушению доступа, и ваша программа выйдет из строя.
temp
это похоже на адрес памяти, где хранится фактический объект. Поскольку temp
он не был инициализирован, его содержимое является случайным (или 0).
*temp
принимает этот адрес памяти и предполагает, что groupIdNode
по этому адресу находится объект типа. Поскольку адрес не был инициализирован, программа выйдет из строя.
Пожалуйста: НЕ ИСПОЛЬЗУЙТЕ УКАЗАТЕЛИ, если вы начинаете писать код на C . Указатели вряд ли необходимы в современном C . Я рассматриваю это как большую, огромную проблему, что указатели по-прежнему разрешены и даже преподаются новичкам в C . Указатели требуют хорошего понимания основных принципов программирования и «косвенных указаний».
Комментарии:
1. итак, что мы можем использовать вместо указателей?
2. Что-нибудь еще. Зачем вам вообще использовать указатели? Существует разница между объектом (переменной) и указателем на объект (сам указатель также является переменной, но другого типа). В большинстве случаев вам захочется использовать сами объекты. Нравится
float variable; variable=10.5f;