Может ли gcc инициализировать неинициализированные указатели в NULL? Или что бы объяснить это поведение?

Можно 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 абсолютно не может автоматически инициализировать неинициализированный указатель, ответил бы на этот вопрос. Или способы, которыми это могло бы.

0 ответов

Другие вопросы по тегам