AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fehler bei SetLength

Ein Thema von peter314 · begonnen am 19. Feb 2009 · letzter Beitrag vom 19. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2   
peter314

Registriert seit: 3. Dez 2008
22 Beiträge
 
#1

Fehler bei SetLength

  Alt 19. Feb 2009, 18:02
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:
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;
Kann mir da irgendjemand helfen, dass geht mir nämlich langsam ziemlich auf den Keks.
Danke.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:07
Wenn bekannt ist, dass der Array 600 Elemente aufnehme musst, warum dann nicht statisch? Setzt du die Größe irgendwo zurück?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von BackOrifice
BackOrifice

Registriert seit: 6. Jun 2005
74 Beiträge
 
Delphi 2007 Architect
 
#3

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:09
Sehe ich das richtig, dass der Speicher jedesmal allokiert und nie wieder freigegeben wird?
Henning
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:19
Zitat von BackOrifice:
Sehe ich das richtig, dass der Speicher jedesmal allokiert und nie wieder freigegeben wird?
Nö, das macht der Compiler schon am Ende der Methode.
Und ich würde die großen Arrays auch dynamisch belassen. Einfach um den Stack nicht zu überlasten.

Der Fehler muss woanders liegen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#5

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:20
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 )


was macht berechnen und zeichnen?
ich vermute da rin einfach mal einen Fehler.
PS: schalte mal die Bereichsprüfung (siehe Projektoptionen) ein.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:20
Zitat:
Nö, das macht der Compiler schon am Ende der Methode.
Bei globalen Variablen?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:21
Zitat von mkinzler:
Zitat:
Nö, das macht der Compiler schon am Ende der Methode.
Bei globalen Variablen?
Upps, habe ich übersehen.
Dann eben so, wie himitsu sagt.

Dann würden statische Arrays aber auch nicht den Stack, sondern "nur" das Image der Datei belasten.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#8

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:22
Zitat von mkinzler:
Zitat:
Nö, das macht der Compiler schon am Ende der Methode.
Bei globalen Variablen?
da halt am Ende der Unit

PS: hatte noch 'ne frage (für den Fragesteller) oben nachgetragen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:23
Zitat:
Dann eben so, wie himitsu sagt. Cyclops
Aber nur wenn die Runtime genügend zusammenhängenden Speicher findet
Markus Kinzler
  Mit Zitat antworten Zitat
peter314

Registriert seit: 3. Dez 2008
22 Beiträge
 
#10

Re: Fehler bei SetLength

  Alt 19. Feb 2009, 18:41
@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:
procedure TForm1.zeichnen;
begin
 Frame21.PaintBox1.Canvas.Pen.Color:= clred;
 Frame21.PaintBox1.Canvas.Polyline(Punkt);
end;
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.

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 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