Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Кто найдёт ошибку(ки) в этом коде? [D6, WinXP]


^Sanya ©   (2002-11-09 14:19:00) 

ри обращении к Base.StringTables[0].Cells[0,0]ошибок не возникает, но после обращении к другим ячейкам и их удачногочтения (перед Destroy), возникает "Invaalid pointer operation".
Где-то утечка памяти???

procedure TForm1.Button1Click(Sender: TObject);
var
Base: TBase;
begin
Base := TBase.Create(ExtractFilePath(Application.ExeName) + "test.ini");
ShowMessage(Base.StringTables[0].Cells[0,0]);
ShowMessage(Base.StringTables[0].Cells[0,1]);
ShowMessage(Base.StringTables[0].Cells[1,0]);
Base.Destroy;
end;


//код модуля используемых классов
type
TBase = class;
TStringTable = class
private
FFileName: string;
FName: string;
FColCount,
FRowCount: Integer;
procedure SetCell(ACol, ARow: Integer; const Value: string);
function GetCell(ACol, ARow: Integer): string;
public
property Name: string read FName;
property ColCount: Integer read FColCount;
property RowCount: Integer read FRowCount;
property Cells[Col, Row: Integer]: string read GetCell write SetCell;
constructor Create(ATableName: string);
destructor Destroy;
end;
TBase = class
private
FStringTables: array[Byte] of TStringTable;
FStringTableCount: Byte;
procedure SetTableNames;
function GetStringTable(i: Byte): TStringTable;
protected
FFileName: string;
public
property StringTables[index: Byte]: TStringTable read GetStringTable;
property FileName: string read FFileName;
property StringTableCount: Byte read FStringTableCount;
constructor Create(AFileName: string);
destructor Destroy;
end;

implementation

uses
CryptInt;

{ TTable }

constructor TStringTable.Create(ATableName: string);
var
basE: tbase;
begin
inherited Create;
FFileName := Base.FFileName;
FName := ATableName;
end;

destructor TStringTable.Destroy;
begin
inherited
end;

function TStringTable.GetCell(ACol, ARow: Integer): string;
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(FFileName);
try
Result := DeCryptEx(IniFile.ReadString(FName, EnCryptEx(IntToStr(ACol) + "^"
+ IntToStr(ARow), CryptKey), ""), CryptKey);
finally
IniFile.Free
end;
end;

procedure TStringTable.SetCell(ACol, ARow: Integer; const Value: string);
var
IniFile: TIniFile;
begin
IniFile := TIniFile.Create(FFileName);
try
IniFile.WriteString(FName, EnCryptEx(IntToStr(ACol)+"^"+IntToStr(ARow),
CryptKey), EnCryptEx(Value, CryptKey));
finally
IniFile.Free
end;
end;

{ TBase }

constructor TBase.Create(AFileName: string);
begin
if not FileExists(AFileName) then
if FileCreate(AFileName) = -1 then
raise Exception.Create(Format("


^Sanya   (2002-11-09 17:58:00) [1]

не в этом суть...
ShowMessage(Base.StringTables[0].Cells[0,0]);- это просто проверка чтения свойств...
Так как проект в разработке, только сейчас пишу св-ва, обозначающие границы соответствующих массивов...

Эх... где же Юрий Зотов... Он бы мне всё как следует расписал...

P.S.: На форум я хожу только для того, чтобы спрашивать саамые нееезнакомые мне вещи. (То есть если судить о моих знаниях по мессагам в форуме, то я полный ноль:) ) Говорить(или спрашивать) о том, что я и так знаю, IMHO, бессмысленно. Пойду-ка в книжках пороюсь...


Anatoly Podgoretsky   (2002-11-09 17:39:00) [2]

Да хотябы что [0].[0,0] может не существовать


^Sanya   (2002-11-09 17:16:00) [3]


> Anatoly Podgoretsky © (09.11.02 15:20)


а что не так с
> ShowMessage(Base.StringTables[0].Cells[0,0]);
???


Anatoly Podgoretsky   (2002-11-09 15:20:00) [4]

Да вот хотя бы эта
ShowMessage(Base.StringTables[0].Cells[0,0]);


Николай Быков   (2002-11-09 15:11:00) [5]


> Anatoly Podgoretsky © (09.11.02 15:06)

Прочитайте еще раз сабж ветки. там не ограничивается число ошибок


Anatoly Podgoretsky   (2002-11-09 15:06:00) [6]

Нет нужды, требоввлось найти только одну ошибку, а тут их много


Николай Быков   (2002-11-09 14:53:00) [7]


> Anatoly Podgoretsky © (09.11.02 14:52)

А можно подробнее?


Anatoly Podgoretsky   (2002-11-09 14:52:00) [8]

Это сплошная ошибка


^Sanya   (2002-11-09 14:20:00) [9]

первую уже нашёл: "ри" = "При" :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо