Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

Invalid Pointer Operation   Найти похожие ветки 

 
jack128 ©   (2003-11-12 11:05) [0]

День добрый.
Уж час сижу над кодом и в упор не вижу ошибки, может Вы поможете..
Суть в том что есть файл записей размером RecSize, отсортированный по убыванию, нужно отсортировать по возростанию..

var
RecSize: integer;
RecCount: integer;
Buffer,
P: PChar;
i: integer;
begin
RecSize := 0; // что б не было warning"ов
case TArhiveType(cbArhiveType.ItemIndex) of
atHourArhive : RecSize := SizeOf(THourArhiveRec);
atDayArhive: RecSize := SizeOf(TDayArhiveRec);
atMonthArhive: RecSize := SizeOf(TMonthArhiveRec);
atYearArhive: RecSize := SizeOf(TYearArhiveRec);
end;
RecCount := FTempFile.Size div RecSize;
GetMem(Buffer, RecSize * RecCount);
try
FTempFile.Position := 0;
if FTempFile.Read(Buffer^, RecSize * RecCount) <> (RecSize * RecCount) then
RaiseLastWin32Error;
GetMem(P, RecSize);
try
for i := 0 to RecCount div 2 - 1 do
begin
move(PChar(Buffer + i * RecSize)^, P^, RecSize);
move(PChar(Buffer - (i + 1) * RecSize)^, PChar(Buffer + i * RecSize)^, RecSize);
move(P^, PChar(Buffer - (i + 1) * RecSize)^, RecSize);
end;
finally
FreeMem(P);
end;
FTempFile.Position := 0;
if FTempFile.Write(Buffer^, RecSize * RecCount) <> (RecSize * RecCount) then
RaiseLastWin32Error;
finally
FreeMem(Buffer); // Здесь сабж!!!
end;

end;
HELP!!!


 
Юрий Федоров ©   (2003-11-12 11:09) [1]

если убрать цикл, остается ошибка ?


 
jack128 ©   (2003-11-12 11:09) [2]

если кто не понял - FTempFile: TFileStream;


 
jack128 ©   (2003-11-12 11:10) [3]


> Юрий Федоров © (12.11.03 11:09) [1]
Да..


 
Плохиш_   (2003-11-12 11:12) [4]

Напиши

FreeMem(Buffer, RecSize * RecCount);


 
jack128 ©   (2003-11-12 11:16) [5]

Блин - дошло. Вот это - бред..

> move( PChar(Buffer - (i + 1) * RecSize)^, PChar(Buffer +
> i * RecSize)^, RecSize);
>


 
Digitman ©   (2003-11-12 11:17) [6]

ошибка где-то здесь, в одной из этих строк :

move(PChar(Buffer + i * RecSize)^, P^, RecSize);
move(PChar(Buffer - (i + 1) * RecSize)^, PChar(Buffer + i * RecSize)^, RecSize);
move(P^, PChar(Buffer - (i + 1) * RecSize)^, RecSize);

ищи


 
jack128 ©   (2003-11-12 11:20) [7]

Вот так всегда, пока кому нибудь не раскажешь про ощибку - сам её не найдешь.. -))



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

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
14-79118
McSimm
2003-10-31 17:35
2003.11.24
Просили статистику.


1-78921
JS
2003-11-12 11:36
2003.11.24
inline-функции


3-78794
ruslan_as
2003-11-05 13:48
2003.11.24
Как сменить в уже созданной базе InterBase пароль


3-78855
DmitryMN
2003-11-03 17:12
2003.11.24
Индексы


1-78911
miw
2003-11-14 21:10
2003.11.24
Программное создание компонентов...