Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Инициализация глобальных переменных [D7]


Alex_C ©   (2010-03-28 12:09:00) 

Я всегда считал, что в дельфи глобальные переменные по умолчанию инициализируются как nil. Что в общем так оно и есть.
Однако сталкнулся с такой проблемой: если запускать мою программу под Линуксом в Wine это не так.
Есть некоторый класс TMyClass - наследник от TThread. Это отдельная нить работы с интернетом. Запускается пользователем по нажатию на кнопку. Перед нажатием я проверяю, не инициализированна ли переменная MyClass:
if not Assigned(MyClass)...
так вот - под виндой все нормально работает, а под Wine при первой же проверке Assigned говорит что переменная уже инициализирована. Выход из положения конечно простой, самому инициализировать переменную


var
  MyClass: TMyClass = nil;


но я считал что Дельфи это по умолчанию сама делает. Или я ошибаюсь?


KSergey   (2010-03-31 11:52:00) [1]

казалось бы, такое мелкое различие...


Alex_C   (2010-03-30 09:50:00) [2]

Большое спасибо! Теперь все стало ясно!


Игорь Шевченко   (2010-03-28 14:04:00) [3]

"Global variables that don't have an explicit initializer are allocated in the BSS section in the executable. They don't actually take up any space in the EXE; the BSS section is a special section that the OS allocates and clears to zero. "

Загрузчик в Wine вполне может не обнулять содержимое сегмента BSS


Наверх

Титульная страница Поиск, карта сайта Написать письмо