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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 16:02   #1
INSectoID
 
Регистрация: 21.07.2010
Сообщений: 8
По умолчанию Неправильно загружается динамический массив TStringList'ов

Всем доброго времени суток. Я делаю icq-чат на delphi и сейчас нужно создать систему комнат ("секторов"). Они хранятся в ini файле и загружаются в динамический массив TStringList'ов. Но правильно загружается только один элемент массива, и только он отображается в списке комнат (TListBox). В процедуре загрузки комнат используется TStringList для работы с секциями ini фала (их количеством, выбором секции по номеру).
При попытке обратиться к элементу 0 массива, выдается пустая строка.
1-й элемент отображается нормально. Попытка обращения ко 2-му элементу выдает ошибку чтения памяти. 1-й элемент всегда является последней комнатой, описпанной в ini файле.
Вид ини файла:
Код:
[Проба1]
Password=NONE
Open=0
[Проба2]
Password=NONE
Open=0
[Проба3]
Password=NONE
Open=1
Пожалуйста, подскажите, почему происходит такая проблема:

Код:
procedure LoadSectors;
var
ini:TIniFile;
LoaderDB:TStringList;
i: integer;
begin
LoaderDB:=TStringList.Create;
ini:=TIniFile.Create(extractfilepath(paramstr(0))+'Sectors.ini');
ini.ReadSections(LoaderDB);
for i:=0 to LoaderDB.Count-1 do begin
ShowMessage(IntToStr(i));
SetLength(Sectors,High(Sectors)+1);
Sectors[High(Sectors)]:=TStringList.Create;
Sectors[High(Sectors)].Add('Name='+LoaderDB[i]);
Sectors[High(Sectors)].Add('Password='+ini.ReadString(LoaderDB[i],'Password','Error'));
Sectors[High(Sectors)].Add('Open='+ini.ReadString(LoaderDB[i],'Open','Error'));
SectorListDB.Add(ini.ReadString(LoaderDB[i],'Name','Error')+' '+IntToStr(High(Sectors)));
end;
Form1.SectorList.Items.Clear;
for i:=Low(Sectors)+1 to High(Sectors) do
Form1.SectorList.Items.Add(GetListParam(Sectors[i],'Name'));
end;
P.S. Прошу не предлагать мне другие чаты или способы создания системы комнат. Если я не использую их - значит, мне они не подходят.
INSectoID вне форума Ответить с цитированием
Старый 17.10.2010, 16:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

После загрузки записей в Sectors они все из ИНИ загружены нормально?
Проверь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.10.2010, 16:14   #3
INSectoID
 
Регистрация: 21.07.2010
Сообщений: 8
По умолчанию

Уже проверял - нормально загружен только предпоследний элемент. Если написать в цикле вместо LoaderDB.Count-1 написать LoaderDB.Count-2, то смещается еще на один элемент ниже. Но в ini-файле все точно в порядке.
INSectoID вне форума Ответить с цитированием
Старый 17.10.2010, 16:32   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Sectors Это что такое?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.10.2010, 16:35   #5
INSectoID
 
Регистрация: 21.07.2010
Сообщений: 8
По умолчанию

Sectors - динамический массив TStringList. В каждый элемент будет добавляться пользователь при входе в комнату и при выходе удаляться из него. Также в нем храняться записи типа 'Name=XXX', 'Pass=XXX' для чтения этих значений.

Последний раз редактировалось INSectoID; 17.10.2010 в 16:37.
INSectoID вне форума Ответить с цитированием
Старый 17.10.2010, 16:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

SetLength(Sectors,Length(Sectors)+1 );
Ато ты как бы первый элемент вообще не трогаешь...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.10.2010, 16:44   #7
INSectoID
 
Регистрация: 21.07.2010
Сообщений: 8
По умолчанию

Я первый раз с динамическими массивами работаю, когда пробовал это раньше, то при обращении к 1-му элементу бчасто была ошибка чтения памяти (хотя, это конечно же я что-то неправильно делал). Но они все равно загружаются в массив, в этом проблемы быть не должно - я же не обращаюсь к 1-му элементу.
-------
Всё, понял, почему была проблема из-за этого. Огромное спасибо вам, тему можно закрывать.
INSectoID вне форума Ответить с цитированием
Старый 17.10.2010, 18:22   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я же не обращаюсь к 1-му элементу.
Неа ) к нулевому.
Low(Sectors) при динмассиве вертает 0, а там у тя ерунда, прога вообще вылететь должна была...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.10.2010, 19:34   #9
INSectoID
 
Регистрация: 21.07.2010
Сообщений: 8
По умолчанию

Ясно. Спасибо большое еще раз. Можно закрыть тему.
INSectoID вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив supra89kren Общие вопросы C/C++ 4 25.03.2010 20:23
Динамический массив! Mikhail91 Общие вопросы C/C++ 9 14.02.2010 14:45
Динамический массив Vito89 Помощь студентам 1 20.10.2009 01:55
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31