|
|
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Delphi 10.3.3 (64-ibt) Заметил такую ИСТИНУ (!!!!????) хотел бы уточнить может оптический обман зрения В процедуре объявил переменную типа ADOConnection (пока не создал объект Create) и она уже не равна Nil , Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Это новый прикол компилятора ? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 19:18 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
HOME_X, Это старый прикол. Локальные unmanaged переменные компилятор не инициализирует. Тебе на строке " if adoSave<>Nil then begin " компилятор должен предупреждение выдавать что переменная не инициализирована. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 19:21 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat HOME_X, Это старый прикол. Локальные unmanaged переменные компилятор не инициализирует. Тебе на строке " if adoSave<>Nil then begin " компилятор должен предупреждение выдавать что переменная не инициализирована. Таки "мозг почистил" - ошибка таже Код: pascal 1. 2. 3. 4. 5. Старый ? В 32-bit 7-ке такого не было... Это теперь надо отслеживать ВСЕ !!! объекты ? Локальные unmanaged переменные компилятор не инициализирует. Если это поле объекта компилятор дейcтвует аналогично ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 19:38 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
HOME_X, Это всегда было. Значения unmanaged переменных инициализируются в созданных классах и глобальных переменных но не в локальных. Оптимизация! (с) Значение s в твоем примере может быть каким угодно. В том числе и nil если повезет и в памяти по ее адресу лежат нули. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 19:41 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat, Неее - у меня DLL-ка писана под 7-ой (версия не помню точно от какой даты) Работала с этой "ошибкой" лет 5 и не сваливалась. Теперь ее переписываю по 64 - bitа С полями дело обстоит аналогично пример ниже может необходимо где-то ДОнастроить среду разработки ? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 19:51 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
HOME_X rgreat, Неее - у меня DLL-ка писана под 7-ой (версия не помню точно от какой даты) Работала с этой "ошибкой" лет 5 и не сваливалась. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Скомпилировал на Delphi7. Результат: FALSE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 20:03 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
HOME_X С полями дело обстоит аналогично пример ниже Я вижу что у тебя на форме шлепнут TADOConnection, который естессно не nil изначально, а полноценно инициализированный класс. Удали с формы ADOConnection1: TADOConnection; и добавь только эту строчку в раздел Public и будет тебе Form1.ADOConnection1=nil. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 20:06 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
HOME_X rgreat, Неее - у меня DLL-ка писана под 7-ой (версия не помню точно от какой даты) Работала с этой "ошибкой" лет 5 и не сваливалась. Неповезло. Вот такая это сволочная штука - ошибки работы с памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 20:15 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat Скомпилировал на Delphi7. Результат: FALSE. А должно быть TRUE. Глобальные переменные инициализируются всегда, вне зависимости от типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 20:56 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, А в случае основного тела консольного приложения оно локальное или глобальное? А то я сначала сделал пример где кроме этого было тоже самое но в процедуре, но одинаковый результат меня удивил, а потому я процедуру из примера вырезал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:00 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat, Всё что декларируется внутри процедур/функций/методов оно локальное, всё что вне - глобальное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:04 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Это не ответ. По крайней мере не совпадающий с объективной реальностью ответ. :) Вообще я вижу "begin end." в теле проекта как этакий особый случай процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:08 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat Это не ответ Это почти дословное цитирование бумажной доки от Delphi 5 ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:11 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Ага, при этом переменные в теле проекта считаются глобальными но при этом не инициализируются. Взаимоисключающие параграфы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:12 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat Вообще я вижу "begin end." в теле проекта как этакий особый случай процедуры. Можно проще: лежит на стеке - локальная, лежит в сегменте данных - глобальная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:12 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat Ага, при этом переменные в теле проекта считаются глобальными но при этом не инициализируются. Я на 10.3 проверил - TRUE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:13 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, В 10.3.3 - да. В D7 - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:22 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Delphi: МИН НЕТ! Не знаю, соберётся-ли на Delphi 7, но проверь: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:34 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Только "System." пришлось убить. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:40 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
rgreat Только "System." пришлось убить. Логично :) Результат говорит о том, что переменные декларированные в теле основного модуля являются глобальными. А вот почему семёрка их не обнуляет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:44 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey rgreat Только "System." пришлось убить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:47 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 21:59 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Попытал я семёрку - глюк оптимизатора. Отключаешь оптимизацию или берёшь адрес от этой переменной и она сразу становится инициализированной :) Порылся в своём старом коде (2003 год): Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 22:15 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
Все переменные класса должны быть инициализированы в конструкторе. Все глобальные переменные должны быть инициализированы в главном блоке begin или же секции initialization. Так же, переменные имеющие ручную инициализацию динамических данных, должны быть уничтожены в ручную в destructor классе, или же finalization секции. И не стоит надеяться на удачную случайность мусора в памяти, для значения переменной. Это Кот Шрёдингера . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 23:04 |
|
||
|
Наполняемость переменной при декларации
|
|||
|---|---|---|---|
|
#18+
ВсеРазумный, Няшка, тебе череп не жмёт? ВсеРазумный Все переменные класса должны быть инициализированы в конструкторе. 1. Переменные класса - это глобальные переменные. Они инициализируются всегда. 2. Но ты то о полях объекта , а они тоже инициализируются всегда. ВсеРазумный Все глобальные переменные должны быть инициализированы в главном блоке begin или же секции initialization. См. выше про глобальные переменные. ВсеРазумный переменные имеющие ручную инициализацию динамических данных Parser error. У меня фсио ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2020, 23:16 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39943728&tid=2038432]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 380ms |

| 0 / 0 |
