Главная страница
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.029 c
3-78767
Кщд
2003-11-05 08:11
2003.11.24
Рассылка сообщений сообщений подключенным к БД пользователям


4-79237
Mohamed
2003-10-01 17:00
2003.11.24
Speech


3-78813
Disruptor
2003-10-10 12:14
2003.11.24
Какую СУБД лучше использовать локально


1-78898
Extazio
2003-11-12 20:47
2003.11.24
Как динамически создать кнопку на тулбаре?


6-79079
Xeon
2003-09-27 18:10
2003.11.24
Серверы (FTP, HTTP, IRC)