![]() |
Fehler bei SetLength
Hallo allerseits,
ich scheine irgendetwas falsch zu machen, aber was, weiss ich nicht. Der Fehler tritt bei mir eigentlich immer auf, wenn ich mit Setlength arbeite. Beim dritten Durchlauf des Programms bekomme ich immer eine AccesViolation.
Delphi-Quellcode:
Kann mir da irgendjemand helfen, dass geht mir nämlich langsam ziemlich auf den Keks.
var
Form1: TForm1; Punkt: Array of TPoint; s: string; //Formel Anzkoef: integer; //Anzahl koeffizienten y: Array of real; koeffizient, exponent: Array of real; procedure TForm1.Button1Click(Sender: TObject); begin s:= Edit1.Text; nextsign(s); ListBox1.AddItem('f(x)='+Edit1.Text,Form1); Anzkoef:= findkoef(s); SetLength(Punkt, 600{Anzpunkte}); SetLength(y,600); {Hier tritt der Fehler auf. Wie gesagt immer beim dritten Mal} SetLength(koeffizient,Anzkoef); SetLength(exponent,Anzkoef); berechnen; zeichnen; end; Danke. |
Re: Fehler bei SetLength
Wenn bekannt ist, dass der Array 600 Elemente aufnehme musst, warum dann nicht statisch? Setzt du die Größe irgendwo zurück?
|
Re: Fehler bei SetLength
Sehe ich das richtig, dass der Speicher jedesmal allokiert und nie wieder freigegeben wird?
|
Re: Fehler bei SetLength
Zitat:
Und ich würde die großen Arrays auch dynamisch belassen. Einfach um den Stack nicht zu überlasten. Der Fehler muss woanders liegen. |
Re: Fehler bei SetLength
SetLength ändert (nicht)vorhanden Speicher, also wenn schon was reserviert ist, dann wird nur die Größe angepaßt (also entweder speicher wird freigegeben, wenn Lenght kleiner wird, oder es wird sozusagen noch was reserviert, wenn Length größer wird)
(ja ich weiß, SetLength kopiert intern und So, aber ich wollt's einfacher erklären :angel2: ) was macht berechnen und zeichnen? ich vermute da rin einfach mal einen Fehler. PS: schalte mal die Bereichsprüfung (siehe Projektoptionen) ein. |
Re: Fehler bei SetLength
Zitat:
|
Re: Fehler bei SetLength
Zitat:
Dann eben so, wie himitsu sagt. :cyclops: Dann würden statische Arrays aber auch nicht den Stack, sondern "nur" das Image der Datei belasten. |
Re: Fehler bei SetLength
Zitat:
PS: hatte noch 'ne frage (für den Fragesteller) oben nachgetragen :mrgreen: |
Re: Fehler bei SetLength
Zitat:
|
Re: Fehler bei SetLength
@mkinzler
Die 600 ist die Anzahl der Punkte die berechnet werden sollen die kann der Nutzer apäter irgendwann ändern. @himitsu Ich weiss leider nicht wo ich die Bereichsprüfung/Projektoptionen finde. Hab ne englische Version.
Delphi-Quellcode:
Für Berechnen erst einmal etwas zum Programm. Dieses soll Funktionsgraphen zeichnen. Der Nutzer gibt eine Funktioen ein (Edit1.Text) und berechnen Wertet diese Funktion aus. D.h. es bestimmt die koeffizienten und exponenten. Außerdem berechnet sie die y-koordinaten der Punkte.
procedure TForm1.zeichnen;
begin Frame21.PaintBox1.Canvas.Pen.Color:= clred; Frame21.PaintBox1.Canvas.Polyline(Punkt); end; Edit: Hab die Bereichsprüfung jetzt gefunden und eingeschaltet. krieg jetzt in berechnen einen RangeCheckError Passiert in einer For-Schleife. Wenn ich in den Compiler (glaub ich,str+F7) gehe ist der Wert der Laufvariable 42000 oder so dabei geht die Schleife von 0 to 0. ??? Edit2: Fehler ist wieder verschwunden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz