может использоваться неинициализированным в этой функции-cpp

#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;