Listen testen...
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Listen testen...
Ich kann es leider nicht belegen, aber ich programmiere mit verschiedenen Listen und dabei stürzt mir immer wieder mal das Programm ab ohne dass die IDE das bemerkt.
Kann es sein, dass mit den Listen irgendwas nicht in Ordnung ist? Ich meine von Purebasic aus. Wie könnte ich sie ausgiebig testen?
Kann es sein, dass mit den Listen irgendwas nicht in Ordnung ist? Ich meine von Purebasic aus. Wie könnte ich sie ausgiebig testen?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Listen testen...
Willst du einen möglichen Fehler nicht erst mal in deinem Code suchen statt gleich in Purebasic selbst zu suchen?stevie1401 hat geschrieben: ↑20.07.2021 18:34 Ich kann es leider nicht belegen, aber ich programmiere mit verschiedenen Listen und dabei stürzt mir immer wieder mal das Programm ab ohne dass die IDE das bemerkt.
Kann es sein, dass mit den Listen irgendwas nicht in Ordnung ist? Ich meine von Purebasic aus. Wie könnte ich sie ausgiebig testen?
Des Weiteren frage ich mich, was du mit "Wie könnte ich sie ausgiebig testen?" meinst?
Ausgiebig in Hinblick auf was? Anzahl von Elementen? Anzahl der Adds und Deletes? Anzahl der Pushs und Pops? Oder keine Ahnung was ...
Da du ja kein Source Code gepostet hast, kann ich auch nur allgemeine Fragen stellen:
- Arbeitest du mit ChangeCurrentElement() und ein Pointer is möglicherweise nicht mehr valide?
- Arbeitest du mit Threads und schützt gemeinsam genutzte Listen nicht mit Mutex?
- Arbeitest du mit PushListPosition() und löschst gff. gepushte Elemente?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Listen testen...
Wären deine genannten Beispiele denn Möglichkeiten ein Programm zu beenden, ohne dass es die IDE merkt?
Ich arbeite nicht mit Threads.
Ich benutze nur addelement(Listelemen())
und deleteelement(Listelement)
Und das ganze nur in foreach (Listelemen()) - Schleifen
Ich kann auch anders fragen. Ist es möglich mit addelement() und deleteelement() ein Programm zu beenden, dass es die IDE nicht merkt?
Inzwischen haben mehrere Programmierer meinen Code angesehen und konnten keine Fehler entdecken.
Wie bekomme ich also ein Programm mit einer Liste in die Knie?
Ich arbeite nicht mit Threads.
Ich benutze nur addelement(Listelemen())
und deleteelement(Listelement)
Und das ganze nur in foreach (Listelemen()) - Schleifen
Ich kann auch anders fragen. Ist es möglich mit addelement() und deleteelement() ein Programm zu beenden, dass es die IDE nicht merkt?
Inzwischen haben mehrere Programmierer meinen Code angesehen und konnten keine Fehler entdecken.
Wie bekomme ich also ein Programm mit einer Liste in die Knie?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Listen testen...
Höchstens, wenn du zu viel Speicher verbrauchst. Prüfst du die Rückgabewerte von AddElement()?
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Listen testen...
Nein, den Rückgabewert von Addelement() habe ich tatsächlich nie geprüft.
Ich habe allerdings Arbeitsspeicher bis zum Abwinken und es gibt bestenfalls 600 Elemente. Da bin ich sehr, sehr weit von irgendwelchen Speichergrenzen entfernt.
Ich habe allerdings Arbeitsspeicher bis zum Abwinken und es gibt bestenfalls 600 Elemente. Da bin ich sehr, sehr weit von irgendwelchen Speichergrenzen entfernt.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Listen testen...
Kann es bei sowas Fehler geben?
Code: Alles auswählen
ForEach Listenelement()
If Listenelement()\Name="kann weg"
Deleteelement(Listenelement())
break
Endif
Next
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Listen testen...
In dieser Form nicht. Problematisch wird es, wenn du nach dem DeleteElement kein Break hast, aber irgendwo noch ein Listenelement() benutzt wird. Das hat dann nämlich genau dann kein gültiges Element, wenn du das erste Element löschst.
Daher gibt es optional einen Zusatzparameter bei DeleteElement().
Daher gibt es optional einen Zusatzparameter bei DeleteElement().
Die Hilfe hat geschrieben:Wenn dieser Parameter auf 1 gesetzt wird und dann das erste Element gelöscht wird, wird das zweite Element (dasjenige nach dem gelöschten Element) das neue aktuelle Element sein. Dieses Flag stellt sicher, dass nach dem Löschen immer ein gültiges aktuelles Element vorhanden ist, solange es noch Elemente in der Liste gibt.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Listen testen...
Hallo,
in deinem Code verwendest du nach dem löschen den Befehl BREAK.
Das heisst es wird pro durchlauf nur ein Element gelöscht auch wenn es mehrere gibt mit dem Inhalt "kann weg".
Kann es deshalb sein, das du weniger Elemente löscht als du glaubst und daher vielleicht viel mehr elemente als die 600 erzeugst?
Grüße
in deinem Code verwendest du nach dem löschen den Befehl BREAK.
Das heisst es wird pro durchlauf nur ein Element gelöscht auch wenn es mehrere gibt mit dem Inhalt "kann weg".
Kann es deshalb sein, das du weniger Elemente löscht als du glaubst und daher vielleicht viel mehr elemente als die 600 erzeugst?
Grüße
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Listen testen...
Mir geht es darum herauszufinden, warum die IDE im laufenden Betrieb nicht bemerkt, dass ein Programm in ihr abstürzt.
Kann sowas zum Absturz führen?
Kann sowas zum Absturz führen?
Code: Alles auswählen
Procedure ElementLoeschen(Name.s)
ForEach Listenelement()
If Listenelement()\Name=Name
DeleteElement((Listenelemen())
Break
EndIf
Next
EndProcedure
ForEach Listenelement()
If listenelement()\Name="Meier"
ElementLoeschen("Meier")
Break
EndIf
Next
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Listen testen...
Nein, dieser Code kann nicht zum Absturz führen. Allerdings ist der Code auch nicht effizient, da du ja unten bereits die Listenposition kennst und durch den Aufruf von ElementLoeschen() noch mal neu durch die ganze Liste gehst.
Wie kommst du denn eigentlich darauf das es Listen sind die das Problem machen?
Wie kommst du denn eigentlich darauf das es Listen sind die das Problem machen?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr