Speicher löschen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
majujajo
Beiträge: 11
Registriert: Do 5. Sep 2013, 18:11

Speicher löschen

Beitrag von majujajo »

Hallo Leute,

ich bin auf der Suche nach einem Befehl, um den Speicher sämtlicher Variablen und Arrays zu löschen bzw auf Null zu setzen.
Der Grund liegt darin, dass ich am Ende meines Programmes dem Benutzer anbieten möchte, dass er das Programm mit neuen Werten ausführt.
Mein Problem ist aber, dass nicht alle Variablen wieder richtig definiert werden, sondern Werte von vorher übernehmen.
Ich könnte auch alle Variablen oben als 0 definieren, jedoch finde ich dieses sehr unschön und umständlich. Gibt es hierfür nicht einen Befehl?

Grüße
majujajo

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Speicher löschen

Beitrag von theo »

So pauschal nicht, aber es gibt z.B. FillChar
http://www.delphibasics.co.uk/RTL.asp?Name=FillChar

majujajo
Beiträge: 11
Registriert: Do 5. Sep 2013, 18:11

Re: Speicher löschen

Beitrag von majujajo »

Aber dann könnte ich die Variablen oben doch auch einfach alle gleich Null definieren oder? Das wäre doch dann genau so viel Arbeit, außer dass ich mir For Schleifen für die Arrays spare..
Oder habe ich das falsch verstanden?

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Speicher löschen

Beitrag von theo »

Das hast du nicht falsch verstanden.
Nur verstehe ich dein Problem nicht ganz. Wie viele 1000 Variablen hast du denn, dass das ein Thema ist?

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Speicher löschen

Beitrag von Socke »

majujajo hat geschrieben:ich bin auf der Suche nach einem Befehl, um den Speicher sämtlicher Variablen und Arrays zu löschen bzw auf Null zu setzen.
Der Grund liegt darin, dass ich am Ende meines Programmes dem Benutzer anbieten möchte, dass er das Programm mit neuen Werten ausführt.
Du solltest grundsätzlich alle Variablen vor dem ersten Gebrauch mit den zu dieser Zeit richtigen Werten initialisieren.
majujajo hat geschrieben:Mein Problem ist aber, dass nicht alle Variablen wieder richtig definiert werden, sondern Werte von vorher übernehmen.
Ich könnte auch alle Variablen oben als 0 definieren, jedoch finde ich dieses sehr unschön und umständlich. Gibt es hierfür nicht einen Befehl?
Wenn du lokale Variablen verwendest, können keine Werte von vorher übernommen werden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Speicher löschen

Beitrag von Christian »

Habt ihr alle überlesen das er AM ENDE seines Programms geschrieben hat ?

Ich find den Ansatz löblich, da scheint sich jemand mal nen Kopf zu Sicherheit zu machen...

Du müsstest in allen Sicherheitsrelevanten funktionen die Lokalen Variablen am ende der Funktion mit Fillchar(Variable,sizeof(Variable),#0); füllen
Globale beim programmende (finalization oder OnTerminate)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Speicher löschen

Beitrag von theo »

Christian hat geschrieben:Habt ihr alle überlesen das er AM ENDE seines Programms geschrieben hat ?
Wieso überlesen?
Ich glaube er meint nicht wirklich am Programmende, sondern er will in einer Schleife das ganze nochmal ausführen, ohne das Programm zu beenden.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Speicher löschen

Beitrag von m.fuchs »

Ist es denn ein GUI- oder ein Konsolenprogramm?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

majujajo
Beiträge: 11
Registriert: Do 5. Sep 2013, 18:11

Re: Speicher löschen

Beitrag von majujajo »

Es ist ein Konsolenprogramm. Und ich möchte das gesamte Programm erneut ausführen, nicht nur eine Schleife.

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Speicher löschen

Beitrag von theo »

Und dann übernimmt er die Werte von vorher? Wie soll das gehen?

majujajo
Beiträge: 11
Registriert: Do 5. Sep 2013, 18:11

Re: Speicher löschen

Beitrag von majujajo »

Weil ich das mit einem goto Befehl mache :oops: :roll:

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Speicher löschen

Beitrag von Michl »

Falls es um dieses Programm geht, dann wäre es wirklich das einfachste, du initialisierst die Variablen bei jedem Durchlauf neu. Es handelte sich ja dabei um 10 bis max. 20 Zeilen Code, was ja nun wirklich nicht so wild ist.
majujajo hat geschrieben:Weil ich das mit einem goto Befehl mache
Das hatte ich versucht dir in dem Forum durch die Blume zu sagen, mit den vielen Labels und goto-Befehlen, sowie deine nicht vorhandene Formatierung, ist es wirklich schwer sich in dem Programm zurecht zu finden. Besser ist es eigene Prozeduren und Funktionen (mit entsprechend aussagekräftigen Bezeichnungen) zu erstellen/nutzen, sowie eine standardkonforme Formatierung.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 10904
Registriert: Mo 11. Sep 2006, 19:01

Re: Speicher löschen

Beitrag von theo »

majujajo hat geschrieben:Es ist ein Konsolenprogramm. Und ich möchte das gesamte Programm erneut ausführen, nicht nur eine Schleife.
Ich glaube du sagst das nicht richtig, deshalb verstehe ich dich nicht.
Du willst nicht das Programm neu ausführen, also auf der Konsole das Programm nochmals starten, sondern einfach einen neuen Durchlauf, OHNE das Programm zu beenden. Ob nun Schleife oder Goto kommt diesbezüglich auf das selbe raus, nur ist Goto nicht empfehlenswert.

majujajo
Beiträge: 11
Registriert: Do 5. Sep 2013, 18:11

Re: Speicher löschen

Beitrag von majujajo »

Michl hat geschrieben:
majujajo hat geschrieben:Weil ich das mit einem goto Befehl mache
Das hatte ich versucht dir in dem Forum durch die Blume zu sagen, mit den vielen Labels und goto-Befehlen, sowie deine nicht vorhandene Formatierung, ist es wirklich schwer sich in dem Programm zurecht zu finden. Besser ist es eigene Prozeduren und Funktionen (mit entsprechend aussagekräftigen Bezeichnungen) zu erstellen/nutzen, sowie eine standardkonforme Formatierung.
Ja formatiert habe ich es mittlerweile auch. Und auch die Variablen heißen anders.
Jedoch habe ich noch keine Alternative zu meinen goto Befehlen gefunden. Bzw kann ich es bei mir nicht anwenden. Tut mir leid, aber als Anfänger sind diese goto Befehle echt am einfachsten..
theo hat geschrieben: Du willst nicht das Programm neu ausführen, also auf der Konsole das Programm nochmals starten, sondern einfach einen neuen Durchlauf, OHNE das Programm zu beenden. Ob nun Schleife oder Goto kommt diesbezüglich auf das selbe raus, nur ist Goto nicht empfehlenswert.
Genau

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Speicher löschen

Beitrag von m.fuchs »

Einfachster Weg: Verschiebe den Quellcode des Hauptprogrammes inklusive aller Variablen in eine Prozedur. Ruf diese Prozedur aus dem Hauptprogramm auf und umgib sie mit repeat..until und einer Abfrage ob das Programm nochmal laufen soll.
Und dann schmeiß den ganzen Goto-Kram raus. Dafür könnte es ganz hilfreich sein, wenn du ein Einsteigerbuch zu Pascal liest.

Und nein, für Anfänger sind Goto-Befehle nicht am einfachsten. Anfänger glauben sowas nur manchmal.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten