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

Вниз

удаление элемента динамического массива   Найти похожие ветки 

 
Ландграф Павел ©   (2004-07-25 22:39) [0]

Делаю так:

type TBuffer=record
pos      : TPoint;
RectOffset: TPoint;
h        : word;
name     : String;
end;

procedure delElem(Index:integer );
var Last : integer;
begin
  Last:= high(buffer);
  if Index <  Last then move(buffer[Index+1],buffer[Index],(Last-Index)*sizeof(buffer[Index]));
  setLength(buffer,Last);//Сдеся глючит, неправельно устанавливает длину
end;
Может кто писал процедуру удаление элемента динамического массива, подскажите...


 
Магнитон Борыч   (2004-07-25 23:04) [1]

Так не удалить, по-моему..
Лучше сделать связный список.


 
Serge_   (2004-07-25 23:49) [2]

type pBuffer=^TBuffer;
и
TList...


 
wnew ©   (2004-07-26 01:34) [3]

Твоя процедура вполне работоспособна, а ошибка возникает очевидно из-за того, что name у тебя имеет тип AnsiString, т.е. переменной длинны. Измени тип на ShortString или просто - name: string[30], не может же имя быть очень длинным. И должно всё стать на свои места. А процедура Move вроде бы работает очень быстро, по крайней мере быстрей, чем банальное копирование ячеек влево в цикле.


 
Fay ©   (2004-07-26 02:45) [4]

TBuffer включающий string смотрится крайне подозрительно.
Ваще.


 
Германн ©   (2004-07-26 03:36) [5]

2 Ландграф Павел ©   (25.07.04 22:39)  
Вообще учти замечания про AnsiString и про string. Ну это во-первых.

Во-вторых. Ну а что ты хочешь при таком коде:
begin
 Last:= high(buffer);
 if Index <  Last then move(buffer[Index+1],buffer[Index],(Last-Index)*sizeof(buffer[Index]));
 setLength(buffer,Last);//Сдеся глючит, неправельно устанавливает длину
end


Last - высчитывается только однажды при входе в процедуру. Так и с какого, SetLength -  сможет установить иную длину?


 
Anatoly Podgoretsky ©   (2004-07-26 08:57) [6]

wnew ©   (26.07.04 01:34) [3]
Нет не работоспособна, по крайней мере две ошибки, обе серьезные

1. Index может быть больше чем Last, а проверки нет
2. После перемещения элементов происходит утечка памяти, значение name не освобождается.

Германн ©   (26.07.04 03:36) [5]
Здесь нет никакой ошибки, если предположить, что у него действительно динамический массив, а возможно это не так, то произойдет усечение массива на один элемент.


 
Ландграф Павел ©   (2004-07-26 12:18) [7]

Магнитон Борыч> на паскале да, но с динамикой быстрее...
Serge_>не то...
wnew>пасиб! вот в этом string и была ошибка, остальное все правельно=)
Германн>это ты не прав! Last-это предпоследний элемент! а  setLength(buffer,Last); делает его последним!!! ты наверное high() с Length() перепутал...
Anatoly Podgoretsky>ну во-первых в МОЕЙ программе index никогда не будет больше last, поэтому эта проверка лишняя...=) Про утечку ты прав, но она только у string`а, у shortstring токого нету...


 
Anatoly Podgoretsky ©   (2004-07-26 13:13) [8]

Ландграф Павел ©   (26.07.04 12:18) [7]
Проверка лишней не бывает, как известно не заряженое ружье стреляет в последнем акте. Других ошибок пока не вижу.



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

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

Наверх




Память: 0.46 MB
Время: 0.033 c
1-1090794975
Konoko
2004-07-26 02:36
2004.08.08
Проблема с чтением строк


14-1090618605
lak
2004-07-24 01:36
2004.08.08
МеГаРеСпЕкТ


6-1086851596
Алёна
2004-06-10 11:13
2004.08.08
Создание сетевой версии программы в локальной сети


3-1089804063
Dem2
2004-07-14 15:21
2004.08.08
Даты в SQL


1-1090529183
Sergio4
2004-07-23 00:46
2004.08.08
Уникальный код





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский