| Autor |
Beitrag |
*Knust*
      
Beiträge: 95
|
Verfasst: Do 31.07.08 23:02
Hi!
Ich habe ein Programm, das in einigen Prozessen Diesen Fehler rausgibt, wenn der Prozess zuende ist(also beim letzten end;).
Ich würde gerne wissen, was genau diesen Fehler aufruft?
Der Code für den einen Prozess ist dieser:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure tform2.btnclick(x,y:integer); begin if buttons[x][y].caption='' then begin buttons[x][y].Caption:='X'; ary3belegt[x][y][wtag]:=1; inc(ary2belegtpausen[wtag][y]); inc(ary1belegtlehrer[x]); end else begin buttons[x][y].Caption:=''; ary3belegt[x][y][wtag]:=0; dec(ary2belegtpausen[wtag][y]); dec(ary1belegtlehrer[x]); end; end; |
wenn ich schrittweise den prozess durchgehe, zeigt er den fehler nach dem letzten end;.
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00403330 in Modul 'Project1.exe'. Lesen von Adresse FFFFFFDD'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK Hilfe
---------------------------
Was ist das Problem?
mfg
Knust
PS: Vielleicht sollte ich dazu sagen, wass die Sachen aus dem Prozess sind:
buttons is n array of array of tbutton
ary3belegt n array of array of array of integer
ary2belegtpausen mit 2 dimensionen und ary1belegt lehrer halt 1.
Moderiert von Narses: Topic aus Windows API verschoben am Do 31.07.2008 um 23:08
Zuletzt bearbeitet von *Knust* am Fr 01.08.08 00:00, insgesamt 1-mal bearbeitet
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 31.07.08 23:09
*Knust* hat folgendes geschrieben: | | Ich habe ein Programm, das in einigen Prozessen Diesen Fehler rausgibt, wenn der Prozess zuende ist(also beim letzten end;). |
Das heißt wahrscheinlich nicht, dass der Fehler dort auftritt, sondern dass einfach die letzte Zeile der aktuellen Methode markiert wird. Das ist bei mir auch so.
Zugriffsverletzungen ( EAccessViolation) treten gerne mal auf, wenn man vergisst, einen Zeiger (zum Beispiel der auf einen Button) zuzuweisen. Schaue einfach mal im Debugger nach, ob einer der Array-Werte nil ist.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 31.07.08 23:10
Moin!
Eine weitere, häufige Ursache für solche Probleme im Zusammenhang mit Arrays ist eine Indexüberschreitung.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Do 31.07.08 23:17
wenn der zeiger nil wäre, dann dürfte der button ja nicht existieren und er versucht trotzdem drauf zuzugraifen, verstehe ich das richtig???
Wenn das so wäre, dann wäre das nicht der fehler, weil man diese prozedur erst dadurch aufruft, dass man auf den button aus buttons[x][y] clickt...
Eine Indexüberschreitung dürfte auch nicht das problem sein:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm2.Button1Click(Sender: TObject); var x,y:integer; begin for x:=0 to length(buttons)-1 do begin for y:=0 to length(buttons[0])-1 do begin if sender=buttons[x][y] then begin btnclick(x,y); exit; end; end; end; end; |
(das ist der prozess, der den button rausfindet, der geklickt wurde)
er sucht ja raus, wie lang die arrays sind... deswegen wird er keine grenze überschreiten...
Zuletzt bearbeitet von *Knust* am Do 31.07.08 23:26, insgesamt 2-mal bearbeitet
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Do 31.07.08 23:20
Anstelle von length solltest Du high() verwenden. 
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Do 31.07.08 23:24
 ändert nix das problem is das gleiche
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 31.07.08 23:57
Moin!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
| 1.2 Beiträge: | | Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf  oder  klicken und den Titel ändern. Danke Dir!
cu
Narses
Ach ja:
*Knust* hat folgendes geschrieben: | ändert nix das problem is das gleiche |
Und woher kommt dann wtag? 
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Fr 01.08.08 00:01
wtag is n integerwert der 0-4 sein kann...
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 01.08.08 00:04
Moin!
Kommentier mal testweise die Inc+Dec-Anweisungen aus und klicke dann mal, dann Programm beenden, immer noch AV?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Fr 01.08.08 00:30
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 01.08.08 00:35
Moin!
Das wird so nix, pack mal das Projekt ohne die EXE als ZIP hier in den Anhang.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Fr 01.08.08 00:41
Jo hier
Einloggen, um Attachments anzusehen!
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 01.08.08 01:06
Moin!
Ich kriege keine AV, keine Ahnung, was du da machst.
Allerdings hast du ein paar fette Schnitzer in deiner Speicherverwaltung: du erzeugst im Form2Create zwei Stringlisten, aber gibst diese nicht wieder frei  und hier: Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| function tform2.lueckenfuellen(wochentag,pause:integer):integer; begin result:=0; lstlehrer:=findalllehrerzupause(point(wochentag,pause)); for x:=0 to lstlehrer.count-1 do | rufst du eine Funktion auf, die eine Stringliste liefert, aber erzeugst vorher selbst noch eine.
Und insgesamt könnte dein Code mal eine Portion STYLEGUIDE vertragen, das kann man ja kaum lesen...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Fr 01.08.08 01:12
Ja das seltsame ist ja, dass er nicht immer die felher gibt... gib mal 14 pausen und 4 lehrer ein und klicke auf die erste oben links.... dann bekommst du den fehler
Wennn du 13 und 4 hast und auf die klickst nich....macht iwie keinen sinn...
danke schonmal
Knust
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 01.08.08 01:18
Moin!
*Knust* hat folgendes geschrieben: | | Ja das seltsame ist ja, dass er nicht immer die felher gibt... |
*Knust* hat folgendes geschrieben: | | gib mal 14 pausen und 4 lehrer ein und klicke auf die erste oben links.... dann bekommst du den fehler |
Hab ich gemacht, 4 Lehrer, 14 Pausen, li/oben klick, "X" erscheint, Fenster zu, kein Problem.
Ähm, warum nimmst du eigentlich keine Grid-Kompo (z.B. ein String-Grid)? Ist doch irgendwie einfacher, als die dynamischen Kompos, oder?
Abgesehen davon habe ich auch noch nicht wirklich kapiert, was da eigentlich passiert?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Fr 01.08.08 01:23
xD
Ja es ist noch nich ganz fertig....
Es soll im endstadium pausenaufsichtspläne bauen aus möglichkeiten die vorgegeben sind also derhrer xy kann am montag an pause zw aufsicht machen und dann bastelt er sich was zusammen.
ja ich häte auch n grid nehmne können.... egal^^
warum sollte bei mir n fehler angezeigt werden und bei dir nicht???
ich hab es nochmal neu geladen aber immernoch kommt der fehler...
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 01.08.08 01:24
Ähm meinst du vielleicht genau umegkehrt, 14 Lehrer und 4 Pausen, da gibts bei mir nen Fehler ^^
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Fr 01.08.08 01:27
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 01.08.08 01:32
- Der Fehler tritt bei mir sofort auf, ohne dass ich oben links auf den ersten Button klicke
- Im Einzelschritt lies sich feststellen dass er in den zeilen 145-156 auftritt
- ich bin Müde und geh ins Bett  gute nacht ^^
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
*Knust* 
      
Beiträge: 95
|
Verfasst: Fr 01.08.08 01:37
xD gut.... ähnliches denke ich auch gerade...
Es ist zum verzweifeln
Aber danke für eure mühe!
Gute nacht!
Knust
|
|