Можно gcc
как-то инициализировать неинициализированные указатели на NULL
?
На работе мы строим наше программное обеспечение на gcc 4.1.2 так же как Sun Studio 12. Версия gcc, работающая на Red Hat Enterprise Linux, работает нормально 5 дней в неделю в течение нескольких месяцев.
Мы только что выпустили нашу версию Solaris, и она каждый день вылетает при запуске.
Трассировка стека подводит нас к коду:
if( _timer == NULL ) {
_timer = new Timer(bunch, of, parameters);
}
_timer->StartTimer(_timeout);
И мы определили _timer
как нигде не был инициализирован. Итак, мы верим _timer
должен быть установлен для данных мусора, который не сравнивается с NULL
, то получает StartTimer
без таймера когда-либо строится.
Работа фактически поручена моему коллеге, и он проверяет это. Но между тем мне было любопытно: почему наша сборка Linux (gcc) никогда не рушится? Уверяю вас, это один и тот же код — мы используем Perforce и строгую маркировку. Я читал, что компиляторы не инициализируют неинициализированные указатели, поэтому я запутался.
Подтверждение того, что gcc 4.1.2
абсолютно не могу автоматически инициализировать неинициализированный указатель, ответит на этот вопрос. Или способы, которыми это могло бы.
Задача ещё не решена.
Других решений пока нет …