Listen testen...

Für allgemeine Fragen zur Programmierung mit PureBasic.
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Listen testen...

Beitrag von stevie1401 »

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?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Listen testen...

Beitrag von STARGÅTE »

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?
Willst du einen möglichen Fehler nicht erst mal in deinem Code suchen statt gleich in Purebasic selbst zu suchen?
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
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Listen testen...

Beitrag von stevie1401 »

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 programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
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...

Beitrag von NicTheQuick »

Höchstens, wenn du zu viel Speicher verbrauchst. Prüfst du die Rückgabewerte von AddElement()?
Bild
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Listen testen...

Beitrag von stevie1401 »

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 programmiere nur noch mit Linux.
Linux Mint 21.x
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Listen testen...

Beitrag von stevie1401 »

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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Listen testen...

Beitrag von STARGÅTE »

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().
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
ST4242
Beiträge: 42
Registriert: 29.10.2011 16:54

Re: Listen testen...

Beitrag von ST4242 »

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
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Listen testen...

Beitrag von stevie1401 »

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?

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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Listen testen...

Beitrag von STARGÅTE »

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?
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
Antworten