![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Scrip |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
Что значит обнулять? Так что-ли?
|
||||
|
|||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
Ага... именно так...
-------------------- ![]() |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
А нельзя ли вместо обнуления, удалить его, а затем создать заново
|
|||
|
||||
| Scrip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
dsergey
Нееее, не получится, мы ведь ничего в этом случае не записываем в ячейки памяти, а значит весь мусор там по прежнему остается. |
|||
|
||||
| Scrip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
А вот ешо один и один воп.
1. Почему если массив а объявить как фактичесий, то во всех элементах массива будет 0, а если как формальный(т.е внутри подпрограммы) то с мусором. 2. Присвоил а[4] какое-нибудь значение.
В edit1 появляется, естественно, 2323. Далее, если удалить строку a[4]:=2323 и запустить прогу занова, то в edit1 появл. опять 512. Почему? Может какая нить прога туда забивает 512. Но если эта прога уже заняла эту область памяти, тогда как туда залазит Delphi? Что-то я опят недопонимаю. |
|||
|
||||
| Girder |
|
||||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
Попробую попроще объяснить:
Для хранения твоих значений используется стек. т.е. push ebp mov ebp,esp add esp,-$30 - резервируется стек под твой массив .... Отступление: 1) Когда заносится информация в стек командой "push ..." - процессор уменьшает адресс стека (на необходимое количество значений) и записывает по получившимуся адресу информацию. 2) Когда информация забирается(выгружается) из стека командой "pop ..." - процессор копирует информацию из стека(туда куда укажеш) и увеличивает(на необходимое количество значений) адресс стека, Мысля пошла?... Нет, тогда продолжаем. 1)Так как используется стек, то этот адресс(а[4]), в стеке, уже наверняка был использован в твой программе(хочеш ты этого или нет) и было записано в него 512. 2)если напишеш вот так:
То уже не получиш 512. 3) То уже не получиш 512. 4)если напишеш вот так:
то а[4]<>512, а b[4]=512 Компилятор используется один и тот же, так? ... Так. Стек резирвируется рядом(add esp,-$30), так? ... Так. Большая вероятность(>90%) что данный адресс в стеке(который выделяется под a[4]) был использован в участке кода, управление Button1Click - сам понимаеш данный участок будет менятся как правило при изменении компилятора. Т.ч. не грузись - все так как должно быть, а иначе быть не может. -------------------- Как слышим, так и пишим. Истина где-то там... |
||||
|
|||||
| Scrip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
Идею понял.
А вот с этим желательно поподробней.
______________________________________________________ кстати,Girder, ты как узнал, что у меня D7. Это сообщение отредактировал(а) Scrip - 28.5.2004, 01:23 |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
Я же написал волшебное слово - компилятор.
Просто проверил в какой версии выдается 512
- Всмысле? -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Scrip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
Да не знаю я что такое
|
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: 31 Всего: 155 |
А... ты об этом.
Не грузись пока. Придет время -поймеш Удачи. -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Неверное, с Delphi8 уже не поймешь. Там нет asm
|
|||
|
||||
| Jey_k |
|
||||
![]() WEB-командир ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4149 Регистрация: 16.11.2003 Где: Москва Репутация: 1 Всего: 61 |
Серьезно? Ну и отстой... Добавлено @ 20:48
Запомни и детям передай: Только в одной операционной системе прога адресует только выделенную ЕЙ память а не весь доступный объем- это OS/2. А в форточках возможно все, поэтому, переменные, элементы массивов и даже строк лучше либо сразу забивать значениями, либо если они, например, автоинкрементные или используют другие способы автоизменений, обнулять. Успехов Это сообщение отредактировал(а) Jey_k - 30.5.2004, 20:50 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |