Форум: "Основная";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c