![]() |
Variable "P" ist möglicherweise nicht initialisiert worden
Hallo,
finde den Fehler nicht, warum soll P nicht initialisiert sein ?
Delphi-Quellcode:
Function mysin(const X: Extended):Extended; // Wrapper-Funktion, benötigt für Delphi 6 um Sinus-Funktion implementieren zu können
begin Result := sin(x); end; function THixHistoGraph.CalculatePointView // Berechnung der Punkte für die Funktionsdarstellung (AFunc: TFxFunction; const HistoBackround: TRect; x0, y0, dx, dy: Extended): TPointDynArray; var x, y: Extended; i : integer; begin // für jede Spalte einen Punkt SetLength(Result, HistoBackround.Right - HistoBackround.Left + 1); // Punkte berechnen x := 0; for i := Low(Result) to High(Result) do begin y := AFunc(x); y := -y; // Canvas Nullpunkt obere linke Ecke mit Y- Achse nach unten !!! y := y0 + y; // oberen Rand Addieren y := y / dy; // Skalieren Result[i].x := HistoBackround.Left + i; Result[i].Y := HistoBackround.Top + Round(y); // runden x := x + dx; end; // nächster Punkt end; procedure THixHistoGraph.DrawComponent; var ComponentBackround : TRect; // zeichnet Komponente HistoBackround : TRect; // zeichnet die Darstellungsfläche der Komponente begin if FBorderstyle = bsSingle then // mit 3D-Rahmen begin inherited; if (Parent = NIL) or not visible then Exit; begin ComponentBackround := Rect(0, 0, Width, Height); // Koponentenhintergrund Canvas.Brush.Color := FColor; Canvas.Pen.Color := FColor; Canvas.Pen.Style := psSolid; Canvas.FillRect(ComponentBackround); Frame3D(Canvas, ComponentBackround, clBtnHighlight, clBtnShadow, 1); // 3D Rahmen mit der Breite von 1 für Komponentenhintergrund end; begin HistoBackround := Rect(FGapLeft, // Hintergrund der Darstellungsfläche FGapTop, Width - FGapRight, Height - FGapBottom + 2); Canvas.Brush.Color := FHistoBkColor; Canvas.Pen.Color := FHistoBkColor; Canvas.FillRect(HistoBackround); Frame3D(Canvas, HistoBackround, clBtnShadow, clBtnHighlight, 1); DrawGrid; end; end; end; procedure THixHistoGraph.DrawMeasureValue; // Soll die Werte Zeichnen, die er von extern bekommt var x0, y0, dy, dx : Real; i : Integer; P : TPointDynArray; HistoBackround : TRect; begin HistoBackround := Rect(FGapLeft, // Hintergrund der Darstellungsfläche FGapTop, Width - FGapRight, Height - FGapBottom + 2); InflateRect(HistoBackround, -1, -1); for i:= round(ViewXNominalMin) to round(ViewXNominalMax - 1) do begin ViewXNominalMin := FViewXNominalMin; ViewXNominalMax := FViewXNominalMax; x0 := FViewxNominalMin; y0 := (Height - FGapBottom - FGapTop) / FYScale.ValMax; dx := 0.05; dy := 0.02; P := CalculatePointView(mySin, HistoBackround, x0, y0, dx, dy); Canvas.Pen.Style := psSolid; Canvas.Brush.Color := clLime; Canvas.Pen.Color := clLime; DrawPointView(Canvas, HistoBackround, P); //HIER DIE FEHLERMELDUNG end; end; |
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Jupp, vollkommen korrekt.
Wenn DrawPointView dort nicht zufällig einen OUT-Parameter deklariert hat, wo hast du P dann vorher etwas zugewiesen, was du dort übergeben würde? |
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Ja habe ich auch gerade gesehen, der hat ja gar Keine Länge :wall:
Im Prinzip muss ich doch, wenn ich externe Werte Darstellen will, erstmal diese in einem Array speichern und anschließend, je nachdem, wieviele Werte ich habe und wieviele Pixel mir zur Verfügung stehen übergeben.... Oder sehe ich das falsch ? |
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Hmmm, stand das
Delphi-Quellcode:
vorhin auch schon drin?
P := CalculatePointView(...
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
:-D ja, das tat es
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Ein Glück, ich dachte schon, ich sei jetzt völlig verblödet :-D
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Zitat:
Weshalb ? Ich bin doch hier die Krachlatte :stupid: |
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Weil ich die P-Zuweisung gesehen hatte und mich gefragt habe, wann denn der Fall eintreten könnte, dass sie nicht durchlaufen wird.
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Hatte beim ersten Mal die P-Zuweisung glatt übersehn.
Der Witz ist ja, daß dynamische Arrays eigentlich immer automatisch initialisiert sind, eben wegen deren automatischer Speicherverwaltung. Allerdings innerhalb von CalculatePointView ist das Result zwar initialisiert, aber nicht unbedingt leer (Result des vorherrigen Schleifendurchlaufs) Ein Bug im Compiler? :stupid: |
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Haha, Leute Ihr verwirrt mich :feuerchen:
achso...aber, was is denn jetzt der Kasus Knacktus ? was is falsch oder, was muss ich machen, damit das funzt...? |
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Das ist aber der tatsächliche Code und nicht nur ein Auszug? Wenn ja, glaube ich auch, dass der Compiler sich irrt.
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Kann es sein weil das P in einer Schleife zugewiesen wird? Sind die Schleifenbedingungen "ungünstig" wird die Schleife ggf. nicht durchlaufen und P bleibt uninitialisiert bzw. nicht zugewiesen. :gruebel:
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
P wird in einer Scheife zugewiesen, aber innerhalb derselben auch benutzt.
Zitat:
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Was passiert denn, wenn man P am Schleifenanfang nilt? Eigentlich sollte da dann eine andere Warnung kommen ("Auf P zugewiesener Wert wird niemals benutzt").
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
ne is nurn Auszug...
wenn ich P:= Nil setzte meckert er auch garnicht mehr.... Aber nu zu dem Externen werten, das zerbricht mir den Schädel.... Die müssen ja erstmal rein ins Programm, wobei man ja nicht weiß, wieviele das sind ! Wie verwurstet man das so, dass dann ein "vernünftiges" Signal in meiner Kompo dargestellt wird ? |
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Wie sieht den CalculatePointView() aus?
|
AW: Variable "P" ist möglicherweise nicht initialisiert worden
Delphi-Quellcode:
type
TFxFunction = function(const x: Extended):Extended; TPointDynArray = Array of TPoint; . . . Function mysin(const X: Extended):Extended; // Wrapper-Funktion, benötigt für Delphi 6 um Sinus-Funktion implementieren zu können begin Result := sin(x); end; function THixHistoGraph.CalculatePointView // Berechnung der Punkte für die Funktionsdarstellung (AFunc: TFxFunction; const HistoBackround: TRect; x0, y0, dx, dy: Extended): TPointDynArray; var x, y: Extended; i : integer; begin // für jede Spalte einen Punkt SetLength(Result, HistoBackround.Right - HistoBackround.Left + 1); // Punkte berechnen x := 0; for i := Low(Result) to High(Result) do begin y := AFunc(x); y := -y; // Canvas Nullpunkt obere linke Ecke mit Y- Achse nach unten !!! y := y0 + y; // oberen Rand Addieren y := y / dy; // Skalieren Result[i].x := HistoBackround.Left + i; Result[i].Y := HistoBackround.Top + Round(y); // runden x := x + dx; end; // nächster Punkt end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 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