Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - problem mit array of record
delphiUSER5 - Mi 22.02.12 18:01
Titel: problem mit array of record
hi leute ich bins nochmal.
ich haben folgendes problem: ich habe einen record
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| type TFIELD1 = ARRAY OF INTEGER;
TYPE Tvokabel = RECORD s, t : STRING; feld : TFIELD1; ort : TListBox; stelle, vocRank : INTEGER; end;
VAR voc : ARRAY OF Tvokabel;
procedure TFoVoc_ask.Button6Click(Sender: TObject); VAR j, n : INTEGER; b : BOOLEAN; hilf : Tvokabel; begin n := vocanzahl-1; REPEAT j := n; b := FALSE; FOR j := 0 To n DO IF voc[j+1].vocRank > voc[j].vocRank THEN begin b := TRUE; hilf := voc[j]; voc[j] := voc[j+1]; voc[j+1] := hilf; end; UNTIL not b;
LBoxSort1.Clear; FOR j := 0 TO n DO begin LBoxSort1.Items.Add(voc[j].s); end; |
Problem: programm stürtzt ab und sagt: "Zugriffsverletztung bei BLABLABLA" das hilft mir nich weiter. was mache ich beim vertauschen der werte falsch? :D danke für hilfe
Moderiert von
Martok: Delphi-Tags hinzugefügt
Nersgatt - Mi 22.02.12 18:56
Als erstes schreib Deinen Code mal bitte in Delphi-Tags: <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG3c07803a60eb36fafcc162121a05fcf1}</span></span>
Und dann rück ihn ordentlich ein.
Und dann sagst Du uns, in welcher Codezeile der Fehler auftritt.
Und dann gucken wir nochmal... :roll:
Tranx - Mi 22.02.12 19:22
Soweit ich das sehe, bei derartigem Durcheinander ohne Einrückung etc sehr schwierig, liegt das wohl daran, dass Du voc nicht initialisiert hast.
Du schreibst voc als ARRAY of TVokal. Damit hat voc aber, im Gegensatz zu z.B.
Delphi-Quelltext
1:
| voc : Array[0..100] of TVokal; |
noch keine Speicherplatzzuweisung. Jeder Zugriff auf voc führt dann zu unkontrollierten Speicheroperationen irgendwohin, wo für voc nichts freigehalten wurde. Schau Dir einfach die Hilfe für Dynamische Arrays - denn das ist ein ARRAY of ... - an. Da steht alles.
delphiUSER5 - Mi 22.02.12 20:11
sry leute mach ich das nächste mal :zustimm:
nein ich hab schon "voc" mit einer größe versehen: setlength(voc, vocabelanzahl); //*vocabelanzahl ist auch als integervariable deffiniert!
das is nicht das problem.
das Problem ist wahrscheinlich folgendes:
Delphi-Quelltext
1: 2: 3:
| hilf := voc[j]; voc[j] := voc[j+1]; voc[j+1] := hilf; |
da bricht das programm immer ab (glaube ich zumindest, wüsste sonst nicht wo der fehler ist)
Gausi - Mi 22.02.12 20:30
In dem Code sehe ich auch keinen Fehler - das ist ein ganz normaler Bubblesort, und ein +/-1-Fehler soltle auch nicht drin sein, wenn du das Array und die Variable vocabelanzahl so nutzt wie angegeben. :gruebel:
Setz doch mal ein paar Breakpoints und taste dich so ran an die Stelle, wo der Fehler genau auftritt. :)
Gammatester - Mi 22.02.12 21:34
Gausi hat folgendes geschrieben : |
| und ein +/-1-Fehler soltle auch nicht drin sein, wenn du das Array und die Variable vocabelanzahl so nutzt wie angegeben. |
Doch! Es ist ein +/-1 Fehler: Bei
setlength(voc, vocabelanzahl) ist der höchste gültige Index
vocabelanzahl-1. Also im Code entweder
n := vocabelanzahl-2 setzen, oder die Schleife bis n-1 laufen lassen.
Gausi - Do 23.02.12 07:50
Ach verdammt, stimmt ja. :autsch:
delphiUSER5 - Do 23.02.12 17:22
ja danke Leute, hab heute nochmal mit en paar darüber gesprochen und die meinten das gleiche
DANKE NOCHMALS :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!