Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2011, 13:16   #1
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию значение элементов незаполненного массива

Всем привет. Надо было на днях написать небольшую прогу на дельфи. Там я использовал массивы. И в результате войны меня с компилятором выяснилось, что если просто объявить числовой массив, а затем вывести значения его элементов ( до этого не заполняя массив), то они, эти значения какие-то "левые", например
Код:
for i:=0 to 2 do
           stringgrid1.Cells[i,0]:=inttostr(ch[i]);
результат в ячейках перва - 2 117 610 613
вторая - 4 207 295
третья - 4 364 716,
в то время как в паскале вывелись бы нули, почему?

и ещё, например
Код:
var ka: integer;
begin
ka:=0;
end;
при пошаговом выполнении строчка ka:=0 проскочится компилятором, почему? а при коде
Код:
var ka: integer;
begin
showmessage(inttostr(ka));
end;
опять же выведится какое-то левое значение, откуда эти цифры берутся?
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 07.02.2011, 13:20   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

> откуда эти цифры берутся?

Из стека.
mss вне форума Ответить с цитированием
Старый 07.02.2011, 13:42   #3
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

> Из стека.
А почему они не равны нулю как Паскале? (в смысле элементы массива) Почему значения берутся из стека? Может конечно вопрос и наивный, но просто в проге был примерно такой кусок кода
Код:
for i:=1 to 3 do
 ch[i]:=ch[i]+5;
for i:=0 to 2 do
 stringgrid1.Cells[i,0]:=inttostr(ch[i+1]);
и получалась всякая чушь, получается сначала всем элементам надо присвоить нулевое значение, как-то это на кашерно...
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 07.02.2011, 13:45   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> проскочится компилятором, почему?

т.к. значение, присвоенное ka, потом нигде не используется, то компилятор выкинул и само присвоение. Оптимизация называется, $O+.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.02.2011, 13:46   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> как-то это на кашерно...

Очень даже кошерно. Не хватало, чтобы стек ещё чистился при каждом входе в функцию.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
Записать в массив Z подряд семь нулевых элементов массива R,состоящего из N элементов.(Язык QBasic) Лиза) Помощь студентам 0 11.01.2011 16:02
паскаль - Заменить каждый третий элемент массива на значение суммы всех его элементов. tanyalove Помощь студентам 4 26.05.2010 09:55
Необходимо определить максимальное значение, хранимое в 2-х массивах и указать сумму элементов массива Игорь777 Помощь студентам 1 29.03.2009 21:14
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16