![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Access Violation
Strate © (2007-02-21 17:15:00)Здравствуйте. Не подскажете почему вот в таком коде:
constructor TMatrix.Create(FileName : String);
var
FSize : byte;
fleInput : TextFile;
begin
AssignFile(fleInput, FileName);
Reset(fleInput);
ReadLn(fleInput, FSize);
ASize := FSize;
end;
Возникает Acces Violation на строке
ASize := FSize;
Примечение:
ASize - private-поле класса TMatrix. Класс TMatrix - наследник TObject'a
Причём такой код:
constructor TMatrix.Create (Size : byte);
begin
ASize := Size;
end;
работает.
Спасибо за помощь заранее.
Anatoly Podgoretsky (2007-02-21 21:59:00) [1]> Kolan (21.02.2007 17:28:04) [4]
Это ты сам решил или тебе кто то сказал?
RASkov (2007-02-21 21:24:00) [2]> Matrix := Matrix.Create('input.txt');
Тогда да, именно в момент обращения к полю и возникала ошибка ASize := FSize;
под ASize память была нераспределена.
Невнимательность.....
Strate (2007-02-21 20:21:00) [3]Простите невнимательного :(
В общем ларчик просто открывался, я создава объект так:
Matrix := Matrix.Create('input.txt');
, а класс объявлялся как TMatrix = class
RASkov (2007-02-21 18:47:00) [4]> [7] Правильный Вася (21.02.07 18:31)
А в чем проблема? Все должно быть Ок, если существует файл и первая строка в нем "число" например - 157
constructor TMatrix.Create(FileName : String);
var
FSize : byte;
fleInput : TextFile;
begin
AssignFile(fleInput, FileName);
try try Reset(fleInput);
ReadLn(fleInput, FSize);
finally CloseFile(fleInput); end;
ASize := FSize;
except
// Здесь обработать ошибку.
end;
end;
MBo (2007-02-21 18:43:00) [5]>Паскалевский метод остался для совместимости.
А разве есть встроенная в язык альтернатива для форматного чтения из текстового файла?
Правильный Вася (2007-02-21 18:31:00) [6]чтение в Byte из текстового файла?!
RASkov (2007-02-21 18:13:00) [7]> [5] RASkov (21.02.07 18:12)
Т.е. не именно эта строка вызывает ошибку, но... Что в файле?
RASkov (2007-02-21 18:12:00) [8]Ошибка возникает скорее всего на строке - ReadLn(fleInput, FSize);
Что у тебя в файле FileName ?
Kolan (2007-02-21 17:28:00) [9]> Чем плохо?
Паскалевский метод остался для совместимости.
MBo (2007-02-21 17:26:00) [10]> И все жет так загружать из файла плохо
Чем плохо?
Kolan (2007-02-21 17:25:00) [11]> ASize := FSize;
Поле назывют с буквы "F" от слова Field а у тя все наоборот.
Код вроде нормальный... Попробуй проверить утечки:
Возьми MemProof
или если у тебя BDS то напишиReportMemoryLeaksOnShutDown := True;
ЗЫ
И все жет так загружать из файла плохо. Есть же TFileStream...
Strate (2007-02-21 17:16:00) [12]ASize Объявлена так:
private
ASize : byte;