![]() |
AW: TObjectList problem...
ich könnte dir theoretisch auch das Projekt zusenden. Aber sei gewarnt erst war nur was kleines angedacht und es ist dann gewachsen. Ich bin gerade am refactoring um einige desing patterns einzuführen.
Ich versteh leider sehr sehr wenig von Stackfehler um nicht zu sagen garnichts. Ich habe auch keine erfahrungen darin wie man diese eingrenzen kann und ich versteh ehrlich gesagt auch nicht was es hilft die variablen in einen globalen speicherbereich zu zügeln. Also was mir helfen würde: 1. Du erklärst mir genauer wie ich das debuggen/eingrenzen kann. 2. Oder ich sende dir den code zu... mit globalen speicherbereich meinst du was? Eine objektvariable daraus zu machen oder gar klassenvariable. ? |
AW: TObjectList problem...
Hast Du vielleicht Deine Arraygrößen verändert und die Bereichsprüfung nicht aktiviert?
Beim Schreiben über Arraygrenzen hatte ich ähnliche Effekte auch schon zu beklagen :stupid: |
AW: TObjectList problem...
Ich hatte ganz einfache globale Variablen gemeint, am besten getrennt durch leere Arrayvariablen, deren Inhalt man beim Debuggen miteinsehen kann um zu schauen wann das etwas überläuft.
Man könnte auch alle beteiligten Funktionen und Prozeduren auf Korrektheit prüfen. Wenn's nicht eilig ist und ich keine Komponenten installieren musst kannst mir den Code gerne schicken, besser wird es sein ihn ins Forum zu stellen, was der eine übersieht findet ein anderer. |
AW: TObjectList problem...
Hallo zusammen, ich prüffe jetzt noch das Array.
Den kompletten code ins forum zu stellen ist wohl eher schwierig. Es sind immerhin 9 Units und 4 forms. Aber es eilt nicht... ist ein "privates" projekt.... gruss Sev |
AW: TObjectList problem...
Also, ich habe die arrays geprüfft da wird nirgendwo über die array grösse hinaus gelesen. das mit den Globalen Variablen bringt auch keinen Erfolg :-/
gruss Sev |
AW: TObjectList problem...
hab die zeile gefunden:
Delphi-Quellcode:
ich versteh nur nicht was ihn daran stört :-/
function TSensorFactory.GetNewSpeedForAFan(AFan: TFanOverlayObject):Integer;
var i: Integer; TempSens, MasterTemp: TTempOverlayObject; NewSpeed, currentspeed: Integer; HighestSpeed: Integer; begin Result:= -1; HighestSpeed:= -1; Currentspeed:= AFan.NewSpeed; if AFan.Enabled then begin // Alle sensoren werden durchgesteppt for i:= 0 to FTempOvList.Count-1 do begin TempSens:= FTempOvList[i] as TTempOverlayObject ; //Wenn der Sensor aktiv ist wird geschaut ob dieser Fan überhaupt für diesen sonsor verantwortlich ist If TempSens.Enabled then begin NewSpeed:= CalculateNewSpeed(Tempsens, Afan); if newSpeed > HighestSpeed then begin HighestSpeed:= NewSpeed; MasterTemp:= TempSens; end; end; end; //über oder unter der hysterese else in der hysterese if (MasterTemp.Temp >= (MasterTemp.OldTemp + MasterTemp.Offset) ) or (MasterTemp.Temp <= (MasterTemp.OldTemp - MasterTemp.Offset)) or (HighestSpeed = 100) then begin // MasterTemp.OldTemp:= MasterTemp.Temp; <--- wennn ich diese zeile auskomentiere dann geht es :-/ Result:= HighestSpeed; end else Result:= currentspeed; edit: Noch die Passende klasse dazu:
Delphi-Quellcode:
TTempOverlayObject = Class(Tobject)
public TempArrayPos: Integer; //Position im Rückgabearray RealName : String; //Namen im System overlayName: String; //Anzeigenamen LowestTemp: integer; //Konfigurierte min Temp HighestTemp: integer; //Konfigurierte höchsttemperatur Temp: Integer; //Aktuelle Temperatur OldTemp:Integer; //Letzte Temperatur vor der Temp änderung (für hysterese wichtig) Offset: integer; //Offset für die Hysterese Enabled: Boolean; //Aktiv/Inaktiv IdleTemp: Integer; LoadTemp: Integer; ResponsibleFans: TObjectlist; // Fans die Zuständig sind für diesen Sensor. constructor create; destructor destroy(); override; End; |
AW: TObjectList problem...
Passt zwar nicht zu der von Dir auskommentieren Zeile und ist ohne Debugger nur aus dem Bauch heraus. Was passiert denn, wenn MasterTemp in der oberen Schleife überhaupt nicht zugewiesen wird. Dann kracht es im unteren Bereich, allerdings imho schon in der If-Abfrage.
Initialisiere MasterTemp über der for-Schleife mal mit nil und prüfe als erste Bedingung unten, ob es im for überhaupt zugewiesen wurde (if assigned). |
AW: TObjectList problem...
Ist MasterTemp vielleicht undefiniert? Dann schreibst Du ja in irgend einen Speicherbereich.
Setze MasterTemp vor Deiner Schleife mal auf nil und teste bei der späteren Behandlung auf <> nil. |
AW: TObjectList problem...
hab die lösung -.-
if(Assigned(MasterTemp)) and( (MasterTemp.Temp >= (MasterTemp.OldTemp + MasterTemp.Offset) ) or (MasterTemp.Temp <= (MasterTemp.OldTemp - MasterTemp.Offset)) or (HighestSpeed = 100)) then begin |
AW: TObjectList problem...
:D - nu ja, da haben wir am Ende ja gleich eine gleiche "Dreifach-Lösung" innerhalb von 4 Minuten.
Die Zuweisung auf nil vorher solltest Du auf jeden Fall auch noch ergänzen! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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