Thread View: pl.comp.lang.pascal
7 messages
7 total messages
Started by notaras
Sun, 25 Jan 2009 17:00
EAccessViolation : Access violation
Author: notaras
Date: Sun, 25 Jan 2009 17:00
Date: Sun, 25 Jan 2009 17:00
64 lines
2376 bytes
2376 bytes
Kod:
program nos_text_mode;
uses
nos_types,crt,SysUtils;
var
f:file of TConfig; //plik z danymi
temp:TConfig; //zmienna pomocnicza
temp_boolean:boolean;
temp_char:char;
f2:longint;
BEGIN
if FileExists('config.dat') then
begin
assign(f, 'config.dat');
reset(f);
read(f,temp);
close(f);
writeln('dane konfiguracyjne pomyslnie wczytane');
writeln('aaaaaaaa');
end;
writeln('bbbbbbbb');
END.
Program daje ciekawe wyniki:
dane konfiguracyjne pomyslnie wczytane
aaaaaaaa
bbbbbbbb
An unhandled exception occurred at $08049761 :
EAccessViolation :
Access violation
$08049761
$080566B5
$080481C2 P$NOS_TEXT_MODE_finalize_implicit,
of nos_text_mode.pas
$080572B2
$08057485
nos_types zawiera:
TUser=record
id:string;
end;
TConfig=record
ftp_user:string;
ftp_pass:string;
upload_ip:string;
download_url:string;
user:TUser;
end;
Program kompiluje pod linuxem (ubuntu 8.10) poleceniem:
ppc386 -gl nos_text_mode.pas
Co zrobic aby program konczyl sie normalnie?
Re: EAccessViolation : Access violation
Author: Mirek
Date: Sun, 25 Jan 2009 20:14
Date: Sun, 25 Jan 2009 20:14
16 lines
1429 bytes
1429 bytes
On nie, 25 sty 2009 18:00:54 in article news:<6c39f892-946c-47a0-b7a0-d0e30f3d72d5@z6g2000pre.googlegroups.com> notaras wrote: > An unhandled exception occurred at $08049761 : > EAccessViolation : > Access violation > $08049761 > $080566B5 > $080481C2 P$NOS_TEXT_MODE_finalize_implicit, > of nos_text_mode.pas > $080572B2 > $08057485 > > nos_types zawiera: nos_types musi zawierać coś wiecej i tam szukaj błędu
Re: EAccessViolation : Access violation
Author: notaras
Date: Sun, 25 Jan 2009 20:50
Date: Sun, 25 Jan 2009 20:50
22 lines
2157 bytes
2157 bytes
On 25 Sty, 21:14, Mirek <pisz_na.mi...@dionizos.zind.ikem.pwr.wroc.pl> wrote: > On nie, 25 sty 2009 18:00:54 in article <news:6c39f892-946c-47a0-b7a0-d0e30f3d72d5@z6g2000pre.googlegroups.com> > > notaras wrote: > > An unhandled exception occurred at $08049761 : > > EAccessViolation : > > Access violation > > $08049761 > > $080566B5 > > $080481C2 P$NOS_TEXT_MODE_finalize_implicit, > > of nos_text_mode.pas > > $080572B2 > > $08057485 > > > nos_types zawiera: > > nos_types musi zawierać coś wiecej i tam szukaj błędu W nos_types błędu nie ma, są w nim tylko te dwa typy. Jeżeli na końcu programu doda się nieskończoną pętle to błąd nie wystąpi, wygląda to tak jakby kończenie programu wywoływało ten błąd.
Re: EAccessViolation : Access violation
Author: Mirek
Date: Sun, 25 Jan 2009 23:21
Date: Sun, 25 Jan 2009 23:21
19 lines
1828 bytes
1828 bytes
On nie, 25 sty 2009 21:50:50 in article news:<13a608e6-edfe-4d07-a2a0-3834fbafb3dd@z27g2000prd.googlegroups.com>
notaras wrote:
> W nos_types błędu nie ma, są w nim tylko te dwa typy. Jeżeli na końcu
> programu doda się nieskończoną pętle to błąd nie wystąpi, wygląda to
> tak jakby kończenie programu wywoływało ten błąd.
Ja zrobiłem taki nos_types i umnie działa (fpc 2.2.0).
Skompiluj z opcjami:
-gl use line info unit to show more info for backtraces
-Ci IO-checking
-Co check overflow of integer operations
-Cr range checking
-Ct stack checking
-gc generate checks for pointers
Czyli: fpc -glc -Ciort -Xs ...
Ale najpierw skasuj pliki nos_types.{o,ppu}.
Może kompilator walnięty, albo ten plik danych jest jakiś nie taki.
Re: EAccessViolation : Access violation
Author: notaras
Date: Mon, 26 Jan 2009 13:28
Date: Mon, 26 Jan 2009 13:28
2 lines
1529 bytes
1529 bytes
Po usunięciu 'if FileExists('config.dat') then " program działa
poprawnie. Czy jest jakaś inna metoda sprawdzenia czy plik istnieje?
Re: EAccessViolation : Access violation
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 27 Jan 2009 15:46
Date: Tue, 27 Jan 2009 15:46
107 lines
3883 bytes
3883 bytes
On Sun, 25 Jan 2009 20:14:06 +0000 (UTC), Mirek wrote:
> On nie, 25 sty 2009 18:00:54 in article news:<6c39f892-946c-47a0-b7a0-d0e30f3d72d5@z6g2000pre.googlegroups.com>
> notaras wrote:
>> An unhandled exception occurred at $08049761 :
>> EAccessViolation :
>> Access violation
>> $08049761
>> $080566B5
>> $080481C2 P$NOS_TEXT_MODE_finalize_implicit,
>> of nos_text_mode.pas
>> $080572B2
>> $08057485
>>
>> nos_types zawiera:
>
> nos_types musi zawierać coś wiecej i tam szukaj błędu
Prawie dobrze Kolega kombinuje ;). Sekcja finalization sprząta
też AnsiStringi, jeżeli do tychże trafia jakieś śmieci, tzn.
do nagłówka, długości, etc, to mogą wyskoczyć podobne krzaczki.
Do orginalnego autora wątku:
1. Upewnij się że nie zapisałeś krzaków do tego pliku config.dat,
musi być tam zserializowana dokładnie ta sama wersja TConfig.
[Binarnie, żadnych plików textowych ;)]
2. Upewnij się że w TConfig i w TUser masz shortstring - jeżeli
jakimś cudem właczysz $mode objfpc i jakimś cudem kompilator
wymyśli żeby tam wsadzić string=AnsiString to będziesz miał
bagno podobne do obecnego, bo do pliku zapiszą się pointery
;).
3. Aczkolwiek nie podejrzewam tego, nie masz w sekcji finzalization
unitu nos_types nic co może się wywalić?
4. SOA#1 u mnie działa po przeklejeniu i po wygenerowaniu pliku
config.dat:
// nos_types.pas
unit nos_types;
{$MODE objfpc}
interface
type
TUser=
record
id:shortstring;
end;
TConfig=
record
ftp_user:shortstring;
ftp_pass:shortstring;
upload_ip:shortstring;
download_url:shortstring;
user:TUser;
end;
implementation
end.
// test.pas
{$MODE objfpc}
uses
nos_types,crt,SysUtils;
var
f:file of TConfig;
temp:TConfig;
temp_boolean:boolean;
temp_char:char;
f2:longint;
begin
{* tym sobie wygenerowałem "napewno poprawny plik"
FillChar(temp, sizeof(temp), #0);
assign(f, 'config.dat');
rewrite(f);
write(f, temp);
close(f);
*}
if FileExists('config.dat') then
begin
assign(f, 'config.dat');
reset(f);
read(f,temp);
close(f);
writeln('dane konfiguracyjne pomyslnie wczytane');
writeln('aaaaaaaa');
end;
writeln('bbbbbbbb');
end.
// -------------------------------------------------------------
/cygdrive/c/dev/fpc/bin/i386-win32$ ./fpc -h | head -2
Free Pascal Compiler version 2.2.0 [2007/09/09] for i386
Copyright (c) 1993-2007 by Florian Klaempfl
// ps. uważaj na warningi:
--
Pozdrawiam,
Łukasz 'Maly' Ostrowski. http://maly.nemo.pl/
ICQ: 148498663 GG: 2544385 AIM: malyzgora
GTalk: l3vi4than@gmail.com ASTRA: L3viathan
Re: EAccessViolation : Access violation
Author: Andrzej Grażyński
Date: Thu, 01 Oct 2009 19:37
Date: Thu, 01 Oct 2009 19:37
69 lines
2516 bytes
2516 bytes
notaras pisze:
> Kod:
>
> program nos_text_mode;
>
>
> uses
> nos_types,crt,SysUtils;
>
> var
> f:file of TConfig; //plik z danymi
> temp:TConfig; //zmienna pomocnicza
> temp_boolean:boolean;
> temp_char:char;
> f2:longint;
>
>
>
> BEGIN
> if FileExists('config.dat') then
> begin
> assign(f, 'config.dat');
> reset(f);
> read(f,temp);
> close(f);
> writeln('dane konfiguracyjne pomyslnie wczytane');
> writeln('aaaaaaaa');
> end;
> writeln('bbbbbbbb');
>
> END.
>
> Program daje ciekawe wyniki:
>
> dane konfiguracyjne pomyslnie wczytane
> aaaaaaaa
> bbbbbbbb
> An unhandled exception occurred at $08049761 :
> EAccessViolation :
> Access violation
> $08049761
> $080566B5
> $080481C2 P$NOS_TEXT_MODE_finalize_implicit,
> of nos_text_mode.pas
> $080572B2
> $08057485
>
> nos_types zawiera:
>
> TUser=record
> id:string;
> end;
> TConfig=record
> ftp_user:string;
> ftp_pass:string;
> upload_ip:string;
> download_url:string;
> user:TUser;
> end;
>
>
> Program kompiluje pod linuxem (ubuntu 8.10) poleceniem:
> ppc386 -gl nos_text_mode.pas
>
> Co zrobic aby program konczyl sie normalnie?
Długi stringi w TConfig: Zamień ma shortstring albo array [...]of char/
Dlugie string to encje lifetime managed, czyli de facto pointery do
instancji. ZApisujesz i czytasz pointery, a nie instancje i to jest
przyczyna.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads