![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Scrip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
Почему при выполнении этой процедуры
x[4]=512? При увеличении или уменьшении границ массива значение х[4] меняется. |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
А что значит увеличение/уменьшение границ массива? У тебя статический массив, как можно в нем менять границы?
Вот если было бы
Тогда при SetLength(X,Size) было бы изменение границ массива, а где оно у тебя, я не вижу... А значение содержимого массива у тебя будет меняться каждый раз при вызове TForm1.Button1Click, т.к. массив будет инициализироваться заново... Как решение - вынести массив из процедуры... А вообще приведи больше кода... А то по этому куску я лично мало чего понял... Хотя, наверное, это я такой непонятливый... -------------------- ![]() |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: 21 Всего: 61 |
А где происходит заполение?!
Поставь полный код с заполнением, изменением и т. п. А то получается, что ты выводишь элемент, которого нет, либо в котором содержится число из пямяти, на чьё место был поставлен массив и которое не было удалено предыдущей программой, использующей данную ячейку памяти. |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Это потому что массив - локальный, он хранится в стеке. Видимо мусор в стеке получается одинаковый (т.к. выполняются одни и те же действия).
Можешь увеличить, например, на единицу и длину массива, и № выводимого элемента, тогда у тебя x[5] тоже должно остаться 512... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Marriage |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 842 Регистрация: 4.5.2004 Где: Таганрог Репутация: нет Всего: 2 |
x[5] тоже должно остаться 512...
Действительно так ... Нам преподавали, что массивы нужно обнулять перед использованием, так как в них изначально храняться каки-то значения .. -------------------- Praemonitus, praemunitus |
|||
|
||||
| Jey_k |
|
|||
![]() WEB-командир ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4149 Регистрация: 16.11.2003 Где: Москва Репутация: 1 Всего: 61 |
Marriage
конечно хранятся!!!!! Это же просто выделенная область памяти и в ней что-нибудь да содержится при работе под виндами по крайней мере. Если переменная или элемент массива работает как аккумулятор, то нужно обнулить сначала, в других случаях присвоить конкретное значение |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
Вот это дискуссию развели!!! Scrip, чего молчишь... Народ требует код...
-------------------- ![]() |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Kesh, он же привел код ?! Самый первый пост...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
p0s0l Смотри мой первый пост в этой теме... Я просил больше кода... Да и не я один... Просто из вопроса я многого не понял...
-------------------- ![]() |
|||
|
||||
| December |
|
|||
![]() Antitheorist ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4423 Регистрация: 14.8.2002 Где: Харьков Репутация: 8 Всего: 57 |
p0s0l
На самом деле трудно поверить, что это весь код |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
December, Kesh, и др.
Выразю вопрос Scrip'а в понятной всем форме, а то многие требуют какой-то код... Итак, вопрошаю: Если изменить границы массива, т.е. вместо: var x: array [0..10] of integer; поставить, к примеру, var x: array [0..15] of integer; то по какой-то неведомой причине четвертый элемент массива не изменится... Что за причина такая ? (PS: массив - локальный, т.е. без начального значения). Какой еще код нужен ? Он привел более, чем достаточно... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
p0s0l Дык изменится... И при каждом вызове процедуры (читай - инициализации локального статического массива) будет новый... В зависимости от выделяемого куска памяти... А вот с динамическими все так...
Добавлено @ 01:08 Или я опять чего-то не понял... -------------------- ![]() |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Kesh, а ты проверь. Не изменится. Потому что нет никакой инициализации. Просто в стеке выделяется память (add esp, -40h к примеру - на 16 integer'ов). Ну буди если ты будешь кучу push'ов делать (или действия, приводящие к записи в стек), чтобы забить стек, перед вызовом этой процедуры, тогда да - изменится...
А про динамические - вообще не то... Уж не знаю, как и объяснять... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Scrip |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.5.2004 Репутация: нет Всего: нет |
p0s0l, благодарю!!!
|
|||
|
||||
| Kesh |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
А про статику ты и сам сказал
-------------------- ![]() |
||||
|
|||||
![]()
|
| Правила форума "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. |