Eine Zugriffsverletzung, engl. "Access violation" -> Tritt auf, wenn du auf Speicher zugreifen willst, auf den du nicht zugreifen darfst. In den meisten Fällen wurde ein Objekt nicht erstellt oder ein Array zu klein gemacht. Wenn man mit Pointern arbeitet sind noch vielfältige andere Fehlerquellen möglich...Stephanie H. hat geschrieben:was ist AV?
teilstrings kopieren,wurzel ziehen und arrays <- gelöst
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Re: teilstrings kopieren und wurzel ziehen
Wir brauchen wirklich mehr Informationen über den Code, den du schon hast. Wie groß ist "Zeilenanzahl" bei dir? Hat "Abstaende" die richtige größe?
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: teilstrings kopieren und wurzel ziehen
also ich hab das mal nachgerechnet und irgendwie macht das programm total die fehler...
Code: Alles auswählen
var
X : array of integer;
Y : array of integer;
Xa : integer;
Ya : integer;
Xb : integer;
Yb : integer;
D1 : integer;
D2 : integer;
Wert1 : integer;
Wert2 : integer;
Summe : integer;
Ergebnis : double;
Abstaende : array of array[0..9999] of double;
begin
FOR i := 0 to Zeilenanzahl do begin
FOR a := 0 to Zeilenanzahl do begin
writeln(' ');
Xa := X[i];
Ya := Y[i];
Xb := X[a];
Yb := Y[a];
writeln(Xa);
writeln(Ya);
writeln(Xb);
writeln(Yb);
D1 := (Xa - Xb);
D2 := (Ya - Yb);
writeln(D1);
writeln(D2);
Wert1:= D1*D1; <---hier rechnet das programm immer das falsche
Wert2:= D2*D2; <---und hier
writeln(Wert1);
writeln(Wert2);
Summe:=Wert1+Wert2;
writeln(Summe);
Ergebnis := sqrt(Summe);
writeln(Ergebnis);
Abstaende[a,i] := Ergebnis;
end;
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: teilstrings kopieren und wurzel ziehen
und wenn ich das ohne lazarus öffne also wenn ich die .exe-datei öffne
steht da am ende immer das hier:
An unhandled exception occurred at $00401DD8 :
EInvalidOp : Invalid floating point ooperation
$00401DD8 main, line 191 of project.lpr
Zeile 191 ist das hier: Ergebnis := sqrt(Summe);
steht da am ende immer das hier:
An unhandled exception occurred at $00401DD8 :
EInvalidOp : Invalid floating point ooperation
$00401DD8 main, line 191 of project.lpr
Zeile 191 ist das hier: Ergebnis := sqrt(Summe);
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: teilstrings kopieren und wurzel ziehen
Was ist dann Wert1 und Wert2, die dir ja vorher ausgegeben worden sein müssen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: teilstrings kopieren und wurzel ziehen
das ist der quadrat von d1 oder d2...?!
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: teilstrings kopieren und wurzel ziehen
der numerische Wert wäre das interessante.
Ergänzung: D1, D2, Wert1 und Wert2 als numerischen Wert bitte mal angeben.
Begründung: Was ist wenn durch einen Überlauf des zulässigen Zahlenbereich ein ungültiger Wert entsteht.
Ergänzung: D1, D2, Wert1 und Wert2 als numerischen Wert bitte mal angeben.
Begründung: Was ist wenn durch einen Überlauf des zulässigen Zahlenbereich ein ungültiger Wert entsteht.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: teilstrings kopieren und wurzel ziehen
Code: Alles auswählen
Abstaende : array of array[0..9999] of double;
Code: Alles auswählen
Abstaende : array[0..66,0..66] of double;
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: teilstrings kopieren und wurzel ziehen
also ich hab das mit den abstaenden jetzt so:
var Abstaende : array[0..9999] of array[0..9999] of double;
anders geht es irgendwie nicht
aber wie muss ich dann die tabelle initialisieren mit setlenght?
aber ich glaub nicht das das was daran ändert das da falsch gerechnet wird...
also eigentlich sind das immer unterschiedliche werte aber hier hast du mal ein beispiel
d1= -208548
d2= 152310
wert1= 542595344 //das rechnet das Programm falsch aus
wert2= 1723499620 //und das hier auch
also wert1 und wert2 sind jetzt die falsche werte da rechnet das programm irgenwas falsch...
var Abstaende : array[0..9999] of array[0..9999] of double;
anders geht es irgendwie nicht
aber wie muss ich dann die tabelle initialisieren mit setlenght?
aber ich glaub nicht das das was daran ändert das da falsch gerechnet wird...
also eigentlich sind das immer unterschiedliche werte aber hier hast du mal ein beispiel
d1= -208548
d2= 152310
wert1= 542595344 //das rechnet das Programm falsch aus
wert2= 1723499620 //und das hier auch
also wert1 und wert2 sind jetzt die falsche werte da rechnet das programm irgenwas falsch...
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: teilstrings kopieren und wurzel ziehen
Nicht so. Sonden so:"array[0..9999,0..9999] of double"var Abstaende : array[0..9999] of array[0..9999] of double;
anders geht es irgendwie nicht
aber wie muss ich dann die tabelle initialisieren mit setlenght?
Wenn du einen Statischen Array hast dann nicht, bei einem Dynamischen ja:aber wie muss ich dann die tabelle initialisieren mit setlenght?
SetLenght(MyArray, Zeile, Spalte)
Das ist richtig, aber wenn du keine Spalten-Länge angibst, gibt es eine nette kleine AV.aber ich glaub nicht das das was daran ändert das da falsch gerechnet wird...
Code: Alles auswählen
d1= -208548
d2= 152310
wert1= 542595344 //das rechnet das Programm falsch aus
wert2= 1723499620 //und das hier auch
Das Programm tut das was du ihn sagst, nicht das was du möchtest *G*also wert1 und wert2 sind jetzt die falsche werte da rechnet das programm irgenwas falsch...
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: teilstrings kopieren und wurzel ziehen
d1 und d2 hat das programm ausgerechnet...
FOR i := 0 to Zeilenanzahl do begin
FOR a := 0 to Zeilenanzahl do begin
writeln(' ');
Xa := X;
Ya := Y;
Xb := X[a];
Yb := Y[a];
writeln(Xa);
writeln(Ya);
writeln(Xb);
writeln(Yb);
D1 := (Xa - Xb);
D2 := (Ya - Yb);
writeln(D1);
writeln(D2);
Wert1:= D1*D1; <---hier rechnet das programm immer das falsche
Wert2:= D2*D2; <---und hier
writeln(Wert1);
writeln(Wert2);
Summe:=Wert1+Wert2;
writeln(Summe);
Ergebnis := sqrt(Summe);
writeln(Ergebnis);
Abstaende[a,i] := Ergebnis;
also das hier ist mein quelltext
und wenn ich das nachrechne(Xa,Xb und Ya,Yb weiß ich) ist da irgendwas bei Wert1 und Wert2 falsch...
Ja ich sag dem dämlichen Programm ja was ich möchte nur das hört nicht auf mich
da hab ich doch klip und klar geschrieben das wert1 = d1*d1 ist
und er rechnet da irgend so ein scheiß aus..
FOR i := 0 to Zeilenanzahl do begin
FOR a := 0 to Zeilenanzahl do begin
writeln(' ');
Xa := X;
Ya := Y;
Xb := X[a];
Yb := Y[a];
writeln(Xa);
writeln(Ya);
writeln(Xb);
writeln(Yb);
D1 := (Xa - Xb);
D2 := (Ya - Yb);
writeln(D1);
writeln(D2);
Wert1:= D1*D1; <---hier rechnet das programm immer das falsche
Wert2:= D2*D2; <---und hier
writeln(Wert1);
writeln(Wert2);
Summe:=Wert1+Wert2;
writeln(Summe);
Ergebnis := sqrt(Summe);
writeln(Ergebnis);
Abstaende[a,i] := Ergebnis;
also das hier ist mein quelltext
und wenn ich das nachrechne(Xa,Xb und Ya,Yb weiß ich) ist da irgendwas bei Wert1 und Wert2 falsch...
Ja ich sag dem dämlichen Programm ja was ich möchte nur das hört nicht auf mich

da hab ich doch klip und klar geschrieben das wert1 = d1*d1 ist
und er rechnet da irgend so ein scheiß aus..
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: teilstrings kopieren und wurzel ziehen
Das Programm rechnet nicht falsch, sondern ganz einfach die gewählten Zahlenräume falsch gewählt sind und es deshalb zu Überläufen kommt. Integer ist entweder SmallInt oder LongInt (je nach Modus -> RTFMStephanie H. hat geschrieben: aber ich glaub nicht das das was daran ändert das da falsch gerechnet wird...
also eigentlich sind das immer unterschiedliche werte aber hier hast du mal ein beispiel
d1= -208548
d2= 152310
wert1= 542595344 //das rechnet das Programm falsch aus
wert2= 1723499620 //und das hier auch
also wert1 und wert2 sind jetzt die falsche werte da rechnet das programm irgenwas falsch...

Unter Projekteinstellungen > Quelltext > Überprüfungen
-> Bereich
-> Überlauf
-> Stack
anwählen, das Projekt neu erstellen und mal laufen lassen, es sollten jetzt viel mehr Fehler sichtbar sein. Auch der obige erwähnte Fehler. Man sollte gerade bei Prohgrammerstellung die Prüfungen einschalten und erst dann ausschalten, wenn man weis was man tut.
[sarkasmus on] Übrigends macht ein Programm nicht irgendwas, sondern leider das, was der Programmierer geschrieben hat - nicht das was er gemeint hat (oder geglaubt hat zu tun). [sarkasmus off]
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: teilstrings kopieren und wurzel ziehen
welchen typ soll ich denn nehmen?
und was ist RTFM?
ich find das nicht:
und was ist RTFM?
ich find das nicht:
Unter Projekteinstellungen > Quelltext > Überprüfungen
-> Bereich
-> Überlauf
-> Stack
anwählen, das Projekt neu erstellen und mal laufen lassen, es sollten jetzt viel mehr Fehler sichtbar sein. Auch der obige erwähnte Fehler. Man sollte gerade bei Prohgrammerstellung die Prüfungen einschalten und erst dann ausschalten, wenn man weis was man tut.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: teilstrings kopieren und wurzel ziehen
Schau mal unter "Projekt\Compiliereinstlelungen\QuellText".
Projekt findest du im MainMenu: Das ist das Menü, wo Datei, Bearbeiten und soweiter steht. QuellText steht im Dialog, welches dann kommt in der Linken TreeView....
Projekt findest du im MainMenu: Das ist das Menü, wo Datei, Bearbeiten und soweiter steht. QuellText steht im Dialog, welches dann kommt in der Linken TreeView....
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: teilstrings kopieren und wurzel ziehen
da kommen voll viele fehlermeldungen -.- guck mal in meinen anderen thread...
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: teilstrings kopieren und wurzel ziehen
Bezüglich RTFM - befrage das Orakel zu Google 
Zu den Fehlermeldungen - jetzt prüft der Compiler wirklich, vorher hast du ihm die rosarote Brille aufgezwungen. Ich reda da noch gar nicht von den Fehlern die kommen (Runtime Errors), falls das mal mit den Checks kompilierbar wird.
Jetzt ganz einfach die Fehlerliste von OBEN NACH UNTEN abarbeiten. Pluto hat dir schon etliche Hinweise gegeben, man muß sie nur begreifen und dann umsetzen.

Zu den Fehlermeldungen - jetzt prüft der Compiler wirklich, vorher hast du ihm die rosarote Brille aufgezwungen. Ich reda da noch gar nicht von den Fehlern die kommen (Runtime Errors), falls das mal mit den Checks kompilierbar wird.
Jetzt ganz einfach die Fehlerliste von OBEN NACH UNTEN abarbeiten. Pluto hat dir schon etliche Hinweise gegeben, man muß sie nur begreifen und dann umsetzen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).