Может ли 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

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]