Russian Qt Forum

Программирование => Общий => Тема начата: OKTA от Апрель 08, 2014, 16:59



Название: Неинициализированный указатель
Отправлено: OKTA от Апрель 08, 2014, 16:59
Пост так, ради интереса. Сегодня очередной раз обнаружил в действии проблему неинициализированных указателей и общей памяти программы.
И так) Забыл в одном месте сделать указатель = NULL - в самом начале. Весь день ваял интерфейс и все работало хорошо, пока не достиг момента, когда вновь созданный виджет начал влиять на этот неинициализированный указатель в месте абсолютно невсвязанном с интерфейсом(не считая общей памяти). И что меня смутило, так это то, что при определенном количестве виджетов все работало и стоит добавить хоть один и программа вылетает  ;D Вот так начнешь разбираться и помрешь, пока разберешься))) Так что всегда инициализируйте указатели!!!  8)


Название: Re: Неинициализированный указатель
Отправлено: Bepec от Апрель 08, 2014, 17:03
Присоединяюсь. У меня однажды интересно программа работала. После добавления/удаления нескольких падала. И только потом оказалось что указатель не обнулялся. И даже подключение несуществующего плагина почему-то не давало ошибку и даже что-то возвращало :D


Название: Re: Неинициализированный указатель
Отправлено: break от Апрель 08, 2014, 18:53
1) QPointer
2) В новом стандарте можно инициализировать переменные в теле класса, даже до списка инициализации в конструкторе, про который часто все забывали

например

Код:
class A
{
  QWidget * pWidget = 0;
public:
  A();
  ~A();
}

Это очень удобно.

А еще подобную фигню с памятью может вызвать процедура, которая должна сделать return Result; но не делает этого в одном из случаев сложного внутреннего условия. Но сейчас вроде всегда ворнинг компилятором выдается при такой опасности.