Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Invalid pointer operation   Найти похожие ветки 

 
Vadim S   (2003-10-29 16:15) [0]

function SFastPack(Source, Target: Pointer; SourceSize: LongInt): LongInt;
var
w, tmp: Word;
Sourc, Targ: LongType;
t, s: Pointer;
begin
GetMem(t, $FFFA);
GetMem(s, $FFFA);
Sourc.Ptr := Source;
Targ.Ptr := Target;
Result := 0;
while SourceSize <> 0 do
begin
if SourceSize > $FFFA then tmp := $FFFA
else tmp := SourceSize;
dec(SourceSize, tmp);
move(Sourc.Ptr^, s^, tmp);
w := SFastPackSeg(s, t, tmp);
inc(Sourc.Long, tmp);
Move(w, Targ.Ptr^, 2);
inc(Targ.Long, 2);
Move(t^, Targ.Ptr^, w);
inc(Targ.Long, w);
Result := Result + w + 2;
end;
FreeMem(t, $FFFA);
FreeMem(s, $FFFA);
end;
При FreeMem(t, $FFFA);
возникакт ошибка "Invalid pointer operation"
что не так?


 
Vadim S   (2003-10-29 16:17) [1]

В операторах
GetMem(t, $FFFA);
FreeMem(t,$FFFA);

везде стоит адрес $FFFF!!!


 
Smithson   (2003-10-29 16:33) [2]

Перезаписываешь сегмент памяти.


 
Vadim S   (2003-10-29 16:48) [3]

Как сделать правильно?


 
Вася Пупкин   (2003-10-29 17:01) [4]

А что делаешь здесь ?
w := SFastPackSeg(s, t, tmp);


 
Vadim S   (2003-10-29 17:03) [5]

Кодируется сегмент


 
Vadim S   (2003-10-29 17:10) [6]

function SFastPackSeg(Source, Target: Pointer; SourceSize: Word): Word;
begin
asm
push esi
push edi
push eax
push ebx
push ecx
push edx

cld
xor ecx, ecx
mov cx, SourceSize
mov edi, Target

mov esi, Source
add esi, ecx
dec esi
lodsb
inc eax
mov [esi], al

mov ebx, edi
add ebx, ecx
inc ebx
mov esi, Source
add ecx, esi
add edi, 2
@CyclePack:
cmp ecx, esi
je @Konec
lodsw
stosb
dec esi
cmp al, ah
jne @CyclePack
cmp ax, [esi+1]
jne @CyclePack
cmp al, [esi+3]
jne @CyclePack
sub ebx, 2
push edi
sub edi, Target
mov [ebx], di
pop edi
mov edx, esi
add esi, 3
@Nimnul:
inc esi
cmp al, [esi]
je @Nimnul
mov eax, esi
sub eax, edx
or ah, ah
jz @M256
mov byte ptr [edi], 0
inc edi
stosw
jmp @CyclePack
@M256:
stosb
jmp @CyclePack
@Konec:
push ebx
mov ebx, Target
mov eax, edi
sub eax, ebx
mov [ebx], ax
pop ebx
inc ecx
cmp ebx, ecx
je @Lock1
mov esi, ebx
sub ebx, Target
sub ecx, Source
sub ecx, ebx
rep movsb
@Lock1:
sub edi, Target
mov Result, di

pop edx
pop ecx
pop ebx
pop eax
pop edi
pop esi
end;
end;



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

Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.031 c
1-41526
grusty
2003-10-28 11:58
2003.11.13
Как сделать паузу во время выполнения операции...


1-41225
Ivolg
2003-11-01 15:01
2003.11.13
Минимизация приложения!


7-42177
elected
2003-08-29 10:59
2003.11.13
Как сменить серийный номер тома ?


3-41068
Sour
2003-10-22 19:30
2003.11.13
CASE средство разработки


3-40966
Sandman25
2003-10-16 17:18
2003.11.13
Paradox: Select id, (select sum( ...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский