Startseite ¦  was ist neu ¦  programmier tips ¦  indy artikel ¦  intraweb artikel ¦  informationen ¦  links ¦  interviews ¦  sonstiges
kylix ¦  tutorials ¦  online shop ¦  fotos ¦  Add&Win Gewinnspiel


Willkommen Gast. Bitte einloggen oder registrieren.
21.05.2012, 11:26:26
Übersicht Hilfe Suche Einloggen Registrieren

+  SwissDelphiCenter Forum
|-+  German Forums
| |-+  Einsteiger Forum
| | |-+  Um Euch wieder mal mit Trivialitäten zu belästigen:
« vorheriges nächstes »
Seiten: [1] Drucken
Autor Thema: Um Euch wieder mal mit Trivialitäten zu belästigen:  (Gelesen 1961 mal)
Anatol
Gast
« am: 04.06.2002, 10:12:50 »

Es ist zum Haaröl-Seichen:  Ich will über eine Radiogroup in Frame 2 Werte auswählen und die dann in Frame 3 in einem Edit-Feld anzeigen lassen:

Code:

procedure TFrame2.RadioGroup3Click(Sender: TObject);

begin

case RadioGroup3.ItemIndex of

    0: v0:=20;

    1: v0:=25;

    2: v0:=30;

    3: v0:=35;

    4: v0:=40;

    5: v0:=45;

  end;

  Frame31.Edit8.Text:=IntToStr(v0);    

  Frame31.Edit20.Text:=IntToStr(v0);    

end;



Die Werte werden der Variablen v0 zugewiesen, auch Frame31.Edit8.Text und Frame31.Edit20.Text haben den richtigen Wert (wird jedenfalls so angezeigt, wenn ich im Quelltext einen Haltepunkt setze und mit der Maus drüberfahre), nur - in den entsprechenden Edit-Feldern in Frame 3 wird nichts angezeigt!! Woran kann das liegen?

Schüüli froh um Hilfe wäre

Anatol
Gespeichert
BenBE
Hero Member
*****
Offline Offline

Beiträge: 1441


318219379 BenBE@xiondigital.net BenBE1987 ookyBenBE
WWW
« Antworten #1 am: 12.06.2002, 15:14:14 »

1. Initialisiere auf jeden Fall erstmal v0 mit einem Wert (v0 := 0).
2. Der Quelltext ist eigentlich fehlerfrei (außer 1.)
3. Kann den Fehler bei mir (wegen 2.) nicht nachvollziehen
4. Deklariere bitte die Variable v0 lokal in der Procedure

5. Probier mal Alt+P  K (ProjektProjekt neu erstellen),
Wenn da irgendwo Warnungen oder Hinweise angzeigt werden, dann versuch die erstmal zu beheben.[/code]
Gespeichert

Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
Anatol
Gast
« Antworten #2 am: 12.06.2002, 18:25:07 »

Der Code war in der Tat richtig, ich hab nur bei der Variablendeklaration geschlampt...

Wieso müssen eigentlich Variablen zuerst initialisiert werden? Liegt da irgendwelcher Datenmüll im entsprechenden Speicherplatz rum, der zuerst entfernt werden muss? Wenn die Vorstellung richtig ist: wie kommt der dahin, liegengeblieben vom letzten "Benutzer"? Was ist es sonst? Und warum kann Delphi das nicht automatisch machen?

Alles blöde Fragen, die mich aber brennend interessieren...

Gruss, Anatol
Gespeichert
BenBE
Hero Member
*****
Offline Offline

Beiträge: 1441


318219379 BenBE@xiondigital.net BenBE1987 ookyBenBE
WWW
« Antworten #3 am: 13.06.2002, 09:03:24 »

Frage:
Zitat
Wieso müssen eigentlich Variablen zuerst initialisiert werden?
Antwort:
Weil man sonst auf die (meist zufälligen) Daten anderer Anwendungen zugreift, die ihren Speicher an dieser Stelle einmal reserviert hatten.

Frage:
Zitat
Liegt da irgendwelcher Datenmüll im entsprechenden Speicherplatz rum, der zuerst entfernt werden muss?
Antwort:
Ja, so kann man das bezeichnen.

Frage:
Zitat
Wenn die Vorstellung richtig ist: wie kommt der dahin, liegengeblieben vom letzten \"Benutzer\"?
Antwort:
Durch die Speicherzuweisung bei Windows wird der Speicher immer an der Stelle zugewiesen, wo er gerade frei ist. Wenn jetzt aber ein Block schon einmal zugewiesen wurde und zwischenzeitlich wieder verfügbar ist, dann kümmert sich das System nicht darum, dass die Daten wieder gelöscht werden.

Frage:
Zitat
Und warum kann Delphi das nicht automatisch machen?
Antwort:
Weil dann jedes Programm um einen wesentlichen Faktor langsamer seinen Speicher verwalten würde und man eigentlich immer so Programmieren sollte, dass man nur Werte abfragt, die auch einen erwarteten Wert haben (Nicht das bei der Ziehung der Lottozahlen durch ein Programm plötzlich die Kugel mit der Zahl -57891245 gezogen wird, weil der Speicher nicht initialisiert war).
Gespeichert

Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
Sven
Sr. Member
****
Offline Offline

Beiträge: 330


WWW
« Antworten #4 am: 13.06.2002, 15:04:16 »

Wenn ich die Borland-Hilfe richtig gelesen habe, wird automatisch jede deklarierte Variable mit 0 vorblegt.
Gespeichert



Linux: Mandrake 9.1, Kernel 2.4.21, XFree 4.3.0, KDE 3.1.4, Kylix 3 (patched)



Kylix Problem? Hier -] Deutsches Kylixforum werden Sie geholfen
fliege
Gast
« Antworten #5 am: 13.06.2002, 16:06:59 »

so wie ich das verstanden habe, werden 'normale' datentypen (int, str usw...) automatisch mit 0 initialisiert, für spezielle Datentypen, z.B. selbstdefinierte typen, klassen usw... wird nur der speicher reserviert...
Gespeichert
BenBE
Hero Member
*****
Offline Offline

Beiträge: 1441


318219379 BenBE@xiondigital.net BenBE1987 ookyBenBE
WWW
« Antworten #6 am: 14.06.2002, 09:08:12 »

Das mit den normalen Datentypen (Int, Str, usw.) stimmt, auch bei selbstdeklarierten Records funktioniert das, erst wenn Pointer enthalten sind funktioniert das mit dem Initialisieren nicht mehr.

Ich habe aber irgendwo auch schon einmal ein Bsp. gesehen, das hat das selbst bei Ints nicht funktioniert, muss ich mal raussuchen ...
Gespeichert

Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
Seiten: [1] Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006, Simple Machines LLC Prüfe XHTML 1.0 Prüfe CSS