Текущий архив: 2004.08.22;
Скачать: CL | DM;
Вниз
Выделение и освобождение памяти Найти похожие ветки
← →
NPP_OSI (2004-08-03 18:51) [0]Есть такой кусок кода:
procedure Koi2WinProc(Src, Dest: PChar);
const T: array[byte] of byte = (
$00, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $0f, {0}
$10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $1a, $1b, $1c, $1d, $1e, $1f, {1}
$20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c, $2d, $2e, $2f, {2}
$30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $3a, $3b, $3c, $3d, $3e, $3f, {3}
$40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $4a, $4b, $4c, $4d, $4e, $4f, {4}
$50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $5a, $5b, $5c, $5d, $5e, $5f, {5}
$60, $61, $62, $63, $64, $65, $66, $67, $68, $69, $6a, $6b, $6c, $6d, $6e, $6f, {6}
$70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $7a, $7b, $7c, $7d, $7e, $7f, {7}
$80, $81, $82, $83, $84, $85, $86, $87, $88, $89, $8a, $8b, $8c, $8d, $8e, $8f, {8}
$90, $91, $92, $93, $94, $95, $96, $97, $98, $99, $a0, $9b, $b0, $9d, $b7, $9f, {9}
$a0, $a1, $a2, $b8, $a4, $a5, $a6, $a7, $a8, $a9, $aa, $ab, $ac, $ad, $ae, $af, {a}
$b0, $b1, $b2, $a8, $b4, $b5, $b6, $b7, $b8, $b9, $ba, $bb, $bc, $bd, $be, $a9, {b}
$fe, $e0, $e1, $f6, $e4, $e5, $f4, $e3, $f5, $e8, $e9, $ea, $eb, $ec, $ed, $ee, {c}
$ef, $ff, $f0, $f1, $f2, $f3, $e6, $e2, $fc, $fb, $e7, $f8, $fd, $f9, $f7, $fa, {d}
$de, $c0, $c1, $d6, $c4, $c5, $d4, $c3, $d5, $c8, $c9, $ca, $cb, $cc, $cd, $ce, {e}
$cf, $df, $d0, $d1, $d2, $d3, $c6, $c2, $dc, $db, $c7, $d8, $dd, $d9, $d7, $da {f} );
begin
while Src^<>#0 do
begin
Dest^ := Chr(T[Ord(Src^)]);
Inc(Src); Inc(Dest);
end;
end;
procedure TMainForm.KOI2Win1Click(Sender: TObject);
var Src:string;
Dest:PChar;
CurrentFile:TStringlist;
i:integer;
begin
if FileListBox1.ItemIndex=-1 then Exit;
CurrentFile:=TStringlist.Create;
try
CurrentFile.LoadFromFile(FilelistBox1.FileName);
for i:=0 to Currentfile.count-1 do
begin
KOI2WinProc(PChar(Currentfile[i]),Dest);
Currentfile[i]:=String(Dest);
end;
CurrentFile.SaveToFile(FilelistBox1.FileName+".KOI2Win");
finally
CurrentFile.Free;
end;
end;
При его выполнении вылетает Access Violation в выделенной строке.
Полагаю, нужно выделить где-то память и потом её освободить.
Помогите, кто знает, как пофиксить это баг.
← →
Anatoly Podgoretsky © (2004-08-03 18:55) [1]Выделение и освобождение памяти
← →
cyborg © (2004-08-03 19:55) [2]Currentfile[i] -> Currentfile.strings[i] вроде, не помню
← →
cyborg © (2004-08-03 19:57) [3]И вообще вместо
for i:=0 to Currentfile.count-1 do
begin
KOI2WinProc(PChar(Currentfile[i]),Dest);
Currentfile[i]:=String(Dest);
end;
сделай что-то типа:
KOI2WinProc(PChar(Currentfile.Text),Dest);
← →
Alx2 © (2004-08-03 20:00) [4]Dest := PChar(Currentfile[i]);
KOI2WinProc(Dest,Dest);
// Currentfile[i]:=String(Dest); - вот это уже не надо
Страницы: 1 вся ветка
Текущий архив: 2004.08.22;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.025 c