problem mit dynamischem array
hey,
ich habe ein dynamisches array aber ich bekomme wenn ich darauf zugreifen will immer eine fehlermeldung "--------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt P_Ce.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 0045B672 in Modul 'P_Ce.exe'. Schreiben von Adresse 00000000' aufgetreten." ich verstehe einfach nicht wieso.. wenn ich nen dynamisches array habe muss ich doch nicht sagen wie groß es sein soll oder ?! wenn ich das hier so mache :
Delphi-Quellcode:
wieso bekomme ich dann an den gekennzeichneten stellen ne fehlermedlung ?
procedure Tastatur_optimieren;
var Haeufigkeit : Array of integer ; i : integer ; Index : IntegeR ; Haeufigkeitsarray : Array of integer ; begin index := 0; For i := 0 to High(Haeufigkeit)-1 do begin If (Haeufigkeit[i] > Haeufigkeit[i-1]) Then begin inc(index); Haeufigkeitsarray[index] := Haeufigkeitsarray[index] + Haeufigkeit[i] ; // HIER FEHLER end else If (Haeufigkeit[i] <= Haeufigkeit[i-1]) Then begin Haeufigkeitsarray[index] := Haeufigkeitsarray[index] + Haeufigkeit[i] ; // HIER FEHLEr end; (also was es machen soll ist wenn meine 2te zahl (haeufigkeit) größer ist als ihrere vorherige zahl dann soll er eine neue "Zeile" im Array nehmen und sie dort hinein sortieren ) ich hab doch einfach ein dynamisches array und will darauf zugreifen oder ?! danke schonmal :D |
Re: problem mit dynamischem array
Wie groß ist Haeufigkeitsarray?
|
Re: problem mit dynamischem array
Da hast du wohl was falsch verstanden: Gerade bei dynamischen Arrays musst du die Größe mittels SetLength zuweisen :wink:
|
Re: problem mit dynamischem array
und was mach ich wenn ich nicht weiß wie groß die größe ist ?
|
Re: problem mit dynamischem array
Du musst ein Dynamisches Array mit SetLength(aarray,größe); initialisieren.
Wenn du ein neues Element hinzufügen möchtest: Setlength(aarray,Length(aaray)+1); Mist, Roter Kasten, aber egal... |
Re: problem mit dynamischem array
Zitat:
|
Re: problem mit dynamischem array
okay
danke :) ich hatte das wohl echt falsch verstanden :) |
Re: problem mit dynamischem array
prüfe einfach mal die Indize in dem gesamten Code
Haeufigkeit[i-1] ... rate mal, auf welchen Index man zugreift, wenn i = 0 ist Haeufigkeitsarray[index] .... wurde schon gesagt ... ist das Array groß genug? |
Re: problem mit dynamischem array
Zitat:
zählt er auch als '0' letzteres war ja das problem ich dachte man müsste dynamische arrays nicht mit setlength definieren ... |
Re: problem mit dynamischem array
wieso denkt man sowas nicht? SetLength ist doch genau dafür da.
Und nur weil es zufällig geht - schlalte mal in den Projektoptionen die Bereichsprüfung an, dann würden dir übrigens alle die hier genannten Index-Fehler angezeigt :angel2: Und 0-1 ist -1 und -1 gibt es in einem dynamischen Array nicht ... vielleicht meinst du aber i+1, wegen dem High-1 :zwinker: Also für das nächste Mal: > Bereichsprüfung beim Debuggen aktivieren > wärend des Debuggens die Indize und Arraygrößen vergleichen |
Re: problem mit dynamischem array
hey,
wenn ich die letzte zeile (spalte ?! ) des arrays löschen möchte wieso geht das nicht so : SetLength(Haeufigkeitsarray,(High(Haeufigkeitsarra y))-1); ich hab mir gedacht ich definier das array einfach als eine zeile weniger und dann ist die letzte weg ... aber das klappt (auch) nicht ... edit : Bereichsprüfung beim Debuggen aktivieren dazu verrätst du mir wie ich das mach ? :) |
Re: problem mit dynamischem array
"Klappt nicht" ist keine Fehlermeldung. Und mir scheint, Du verwechselst Length() und High().
|
Re: problem mit dynamischem array
Mach so:
SetLength(Haeufigkeitsarray,(Length(Haeufigkeitsar ray))-1); Mist schon wieder Roter Kasten... |
Re: problem mit dynamischem array
Zitat:
klappt ... |
Re: problem mit dynamischem array
Anderer Vorschlag (nur um den Unterschied mal zu zeigen):
Delphi-Quellcode:
SetLength(Haeufigkeitsarray, High(Haeufigkeitsarray));
|
Re: problem mit dynamischem array
Zitat:
du veränderst doch higth garnicht ?! ich möchte doch eigl. die anzahl der spalten -1 haben also die letzte "abschneiden" also müsste es doch high -1 sein oder ?! |
Re: problem mit dynamischem array
Length -> F1
High -> F1 Mach Dich doch erstmal mit den Begriffen vertraut. [edit] Wetten, dass ich High() dadurch auch ändert (zumindest, wenn das Array nicht leer war)? :mrgreen: [/edit] |
Re: problem mit dynamischem array
length gibt die anzahl der elemente
und high die obergrenzen der elemente aber wenn ich die obergrenze verändere müsste ich doch auch die anzahl verändern doer ?! ps. ich mag deine signatur :D |
Re: problem mit dynamischem array
Du änderst die Anzahl doch mit SetLength().
|
Re: problem mit dynamischem array
ich glaube wir reden an einander vorbei :D
aber du hast mir trotzdem geholfen :D vielen dank :D |
Re: problem mit dynamischem array
Mal ganz langsam zum Mitschreiben:
Delphi-Quellcode:
Jetzt klarer?
SetLength(Array, 10);
//-> Length = 10, High = 9 (da von 0 bis 9) SetLength(Array, High(Array)); //entspricht SetLength(Array, 9), siehe oben //-> Length = 9, High = 8 (da von 0 bis 8) |
Re: problem mit dynamischem array
ja
danke :D |
Re: problem mit dynamischem array
Zitat:
|
Re: problem mit dynamischem array
Ja nun, um dynamische Arrays geht es ja die ganze Zeit ;)
|
Re: problem mit dynamischem array
Jupp, ShortString ist auch ein statisches Array, mit dynamischer Inhaltsverwaltung. :angel2:
|
Re: problem mit dynamischem array
Zitat:
Zitat:
Ich wollte halt nur nicht, dass ein Anfänger denkt "Oho, wenn ich SetLength mit High nutze, verkürze ich immer um eins", obwohl das nur auf Lenght(...) - 1 zutrifft ... (Ich bin halt unverbesserlich ...) |
Re: problem mit dynamischem array
Im Prinzip stimmt dieses auch, nur daß beim Sonderfall ShortString
auf andere Funktionen umgeleitet wird, bzw. es bei High als Konstante angelegt und bei Length direkt das LängenByte ausgelesen wird. - High enthält (in diesem Fall) die maximale Größe der speicherbaren Daten, welches alerdings einem "normalem" High entspricht, da dieses der Index des letzen Arrays im internen statischen Array entspricht - Length enthält (in diesem Fall) den Wert des nicht automatisch initialisierten LängenBytes |
Re: problem mit dynamischem array
okay
ich kann euch nicht mehr folgen :D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz