Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Вниз

Не пойму где глюк с массивом.   Найти похожие ветки 

 
Pavelkq   (2005-03-05 10:06) [0]

Здравствуйте! Имею динамический массив Indexes. Сравниваю его с одной переменной и если она оказывается больше надо удалить текущий элемент массива со сдвигом вверх (нулевой элемент не сравнивается и не меняется никогда). Вот код (все переменные типа Integer)
 
Set1:=1;
 i2:=MaxInd;//Round(MaxInd*(100-Form1.TrackBar1.Position)/100);
 While Set1 < EndInd do
 begin
   i1:=Indexes[Set1].Index;
   if i1 <= i2 then
  {&#209;&#228;&#226;&#232;&#227; &#236;&#224;&#241;&#241;&#232;&#226;&#224; &#237;&#224; 1 &#226;&#226;&#229;&#240;&#245; &#238;&#242; &#239;&#238;&#231;&#232;&#246;&#232;&#232; Set1}//*
   begin                                    //*
     Set2:=Set1+1;                          //*
     While Set2 <= EndInd do                //*
     begin                                  //*
       Indexes[Set2-1]:=Indexes[Set2];      //*
       Inc(Set2);                           //*
     end;                                   //*
     Dec(EndInd);                           //*
     Dec(Set1);                             //*
   end;                                     //*
  //*******************************************
 Inc(Set1);
 end;
 SetLength(Indexes,EndInd);

 Данный кусок кода проходит без ошибок, но потом вылетают на ровном месте ошибки (а именно на последнем end Access violation at adress 00401F0E in module "test.exe". Write at adress 00000007. При попытке закрыть приложение выдается ошибка "Invalid pointer operation". Если заремить весь кусок, дальше тоже все работет безупречно.


 
begin...end ©   (2005-03-05 10:10) [1]

> Pavelkq   (05.03.05 10:06)

Что такое EndInd?


 
Pavelkq   (2005-03-05 10:18) [2]

EndEnd - это переменная сыитающая конец массива. Аналог High(Indexes)


 
evvcom ©   (2005-03-05 10:18) [3]

По строке SetLength(Indexes,EndInd); ясно, что у автора путаются понятия последнего индекса и длины массива. Длина массива всегда на 1 больше последнего индекса в динам. массиве, так как индекс первого элемента = 0.


 
Pavelkq   (2005-03-05 10:20) [4]

EndInd, конечно, тороплюсь...


 
Pavelkq   (2005-03-05 10:24) [5]

Да, точно подзабыл этот момент, но суть не меняется. В худшем случае в массиве остается только 1 элемент, т.е. нулевой. При этом SetLength(Indexes,1); срабатывает верно.


 
begin...end ©   (2005-03-05 10:25) [6]

> Pavelkq   (05.03.05 10:18) [2]

> Аналог High(Indexes)

Точно? Сравните EndInd, High(Indexes) и Length(Indexes). Если EndInd - это всё же длина, то ошибка есть, по крайней мере,  вусловии вложенного цикла: While Set2 <= EndInd do.


 
Pavelkq   (2005-03-05 10:32) [7]

А-а-а-а, допетрил! Не понял почему, но у меня в коде было
While Set1 <= EndInd do
а надо именно
While Set1 < EndInd do
Спасибо evvcom за наведение на мысль!


 
evvcom ©   (2005-03-05 10:39) [8]

Я могу больше сказать. Второй цикл (внутренний) вообще лишний. Move + F1 еще тебе поможет.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.06 c
3-1108706953
wHammer
2005-02-18 09:09
2005.03.20
Как в запросе сгруппировать записи по неделям


14-1109833913
MBo
2005-03-03 10:11
2005.03.20
Четверговые задачки


4-1107380317
suharew
2005-02-03 00:38
2005.03.20
Как писать в файл занятый другим приложением.


8-1101659830
Tigert
2004-11-28 19:37
2005.03.20
Как, как можно проще переделать Bitmap в Icon


14-1109416402
boriskb
2005-02-26 14:13
2005.03.20
Вот она - настоящая литература!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский