Сейчас на форуме: hgdagon, asfa, bartolomeo (+5 невидимых)

 eXeL@B —› Программирование —› Проблемы с памятью в Дельфи.
Посл.ответ Сообщение


Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 07 октября 2006 05:48 · Поправил: Satanael
· Личное сообщение · #1

Блин думал умею в Дельфи программировать оказывается что нет

В общем есть у меня такой тип:
TSVar3=record
min:string; //указываю размер (string[100]) всё равно глюки
max:string; !Вот с этими двумя строковыми переменными проблема!
emitter:integer;
end;

И есть Класс:
TPar01=class(TObject)
public
EmCfSourceXY:PSVar3;
EmCfInitAngle:PSVar3;
EmCfInitTrans:PSVar3;

procedure SaveToFile(const f:string;bBitmap,bAlpha:boolean);
Procedure LoadFromFile(const f:string);
Procedure SetDefaultParams;

End;

Так когда я пользуюсь методом LoadFromFile то значения, переменных EmCfSourceXY, EmCfInitAngle, EmCfInitTrans и других, искожаются, портятся, глючат, особенно раздражает когда значения одной налезают на другую.

Как мне избавится от этих проблем с динамической памятью!
Подкиньте хоть какую-нибудь идею!
Заранее благодарен.

-----
Никто не знает столько, сколько не знаю я




Ранг: 52.2 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 октября 2006 06:06
· Личное сообщение · #2

У меня чет похожее было. Псмотри ето - можь пригодитси...

type
TMAPSaver = class(TComponent)
public
procedure SaveToStream(aStream : TStream);
procedure LoadFromStream(aStream : TStream);
procedure SaveToFile(const fileName : String);
procedure LoadFromFile(const fileName : String);
end;

procedure TMAPSaver.SaveToStream(aStream : TStream);
begin
aStream.WriteComponent(Form1);
end;

procedure TMAPSaver.LoadFromStream(aStream : TStream);
begin
aStream.ReadComponent(Form1);
end;

procedure TMAPSaver.SaveToFile(const fileName : String);
var
stream : TStream;
begin
stream := CreateFileStream(fileName, fmCreate);
try
SaveToStream(Stream);
finally
Stream.Free;
end;
end;

procedure TMAPSaver.LoadFromFile(const fileName : String);

procedure CheckResFileStream(Stream : TStream);
var
N : Integer;
B : Byte;
begin
N := Stream.Position;
Stream.Read(B, SizeOf(B));
Stream.Position := N;
if B = $FF then Stream.ReadResHeader;
end;
var
stream : TStream;
begin
stream := CreateFileStream(fileName, fmOpenRead);
try
CheckResFileStream(stream);
LoadFromStream(stream);
finally
Stream.Free;
end;
end;



Ранг: 2.9 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 октября 2006 07:20
· Личное сообщение · #3

Satanael пишет:
min:string; //указываю размер (string[100]) всё равно глюки
max:string; !Вот с этими двумя строковыми переменными проблема!

если ты здесь хранишь имена файлов, то размер следует указывать MAX_PATH = 260.




Ранг: 110.0 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 07 октября 2006 07:23
· Личное сообщение · #4

koderr
если ты здесь хранишь имена файлов, то размер следует указывать MAX_PATH = 260.
Не а не храню, я там храню различные данные которые читаются из файла, обычно из длина от 1 до 10 символов. Я также пробовал max_path не помогает. Пробовал: SetLength() тоже не помагает, все равно память портится.

-----
Никто не знает столько, сколько не знаю я



 eXeL@B —› Программирование —› Проблемы с памятью в Дельфи.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати