Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Fritz Kadelle
Beiträge: 5
Registriert: So 17. Nov 2013, 15:45
OS, Lazarus, FPC: Windows 7 (Lazarus 1.0.12 FPC 2.6.2)
CPU-Target: 32Bit

Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von Fritz Kadelle »

Hallo zusammen,

ich möchte ein Programm schreiben, mit dem ich eine CD-Sammlung verwalten kann. Ich weiß, es gibt auch fertige Lösungen, aber ich möchte eine kleine, genau zugeschnittene Lösung erstellen.Außerdem möchte ich es gerne selber probieren. Das ganze soll mithilfe mehrdimensionaler dynamischer Arrays realisiert werden. Dazu habe ich zunächst ein Programm geschrieben, um mich mit den Arrays vertraut zu machen (Discs/Tracks an beliebiger Stelle einfügen und wieder löschen). Das Programm hat auch soweit funktioniert. Der eigentliche Dateninhalt besteht nur aus einem String, der einen Pseudo-Tracknamen enthält.
Im Anschluss habe ich angefangen das eigentlich Verwaltungsprogramm zu schreiben. Die Daten werden jetzt in Records zusammengefasst. Leider stürzt mir das Programm seitdem regelmäßig ab. Manchmal nachdem ich einen Track einfüge, manchmal erst nach einigen eingefügten Tracks. Es gibt jedesmal einen SIGSEGV-Fehler an derselben Adresse.

Ich habe hier mal das eigentliche Verwaltungsprogramm hochgeladen. Allerdings bin ich mir aber auch nicht sicher, ober der Fehler wirklich in den Arrays zu suchen ist. Vielleicht kann mir jemand weiterhelfen? Vielen Dank schonmal im Voraus.

Code: Alles auswählen

 
 
 
Viele Grüße
Fritz Kadelle
Zuletzt geändert von Fritz Kadelle am Mi 20. Nov 2013, 20:59, insgesamt 2-mal geändert.

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

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von theo »

Statt tausend Meter Code würdest du besser das gezippte und auf das Problem beschränkte Projekt hochladen.

Ansonste empfehle ich TStringList und TList statt Array.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2815
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: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von m.fuchs »

theo hat geschrieben:Statt tausend Meter Code würdest du besser das gezippte und auf das Problem beschränkte Projekt hochladen.
Zumal man dann auch die .lfm-Dateie hätte. Ich nehme an, dass kaum jemand Lust, sich das Formular selber zusammenzuklicken.

Du solltest vielleicht auch mal einen Blick in Richtung Datenbanken werfen. Schließlich sollen die Daten ja auch irgendwo gespeichert werden und suchen möchtest du sicher auch.
Zuletzt geändert von m.fuchs am Do 7. Aug 2014, 08:48, insgesamt 1-mal geändert.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Fritz Kadelle
Beiträge: 5
Registriert: So 17. Nov 2013, 15:45
OS, Lazarus, FPC: Windows 7 (Lazarus 1.0.12 FPC 2.6.2)
CPU-Target: 32Bit

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von Fritz Kadelle »

theo hat geschrieben:Statt tausend Meter Code würdest du besser das gezippte und auf das Problem beschränkte Projekt hochladen.

Ansonste empfehle ich TStringList und TList statt Array.
Ich habe mit Absicht beide Programme hier reingestellt, da vielleicht im Testprogramm ein grundlegender Fehler steckt, der sich dort vielleicht nicht bemerkbar gemacht hat. Ich habe allerdings jetzt alles auf den wesentlichen Teil zusammengekürzt und für die Funktionen, die nicht mehr vorhanden sind, Kommentare gesetzt.

Ich würde gerne bei Arrays bleiben.
m.fuchs hat geschrieben:Zumal man dann auch die .lfm-Dateie hätte. Ich nehme an, dass kaum jemand Lust, siich das Formular selber zusammenzuklicken.

Du solltest vielleicht auch mal einen Blick in Richtung Datenbanken werfen. Schließlich sollen die Daten ja auch irgendwo gespeichert werden und suchen möchtest du sicher auch.
Ich denke nicht, dass das Formular nötig ist, die Funktion der einzelnen Buttons ist ja in den Kommentaren erwähnt, ich habe jetzt aber das Projekt dennoch als zip-Datei hochgeladen. Es wird allerdings eine Komponente names ZVDateTimePicker benötigt.

zu den Datenbanken: s.o. meine Antwort an theo - Das Projekt hatte auch eine Prozedur zum Speichern und Laden, die habe ich allerdings erstmal wieder entfernt, da sie für mein Problem unerheblich ist. Eine Funktion zum Suchen in den Daten benötige ich nicht.

Grüße
Fritz Kadelle
Zuletzt geändert von Fritz Kadelle am Mi 20. Nov 2013, 21:00, insgesamt 1-mal geändert.

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

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von theo »

Unter "auf das Problem beschränktes Projekt" stelle ich mir etwas anderes vor. Mindestens dass jemand der dir helfen möchte keine für das Problem irrelevanten, zusätzlichen Komponenten installieren muss.
Wenn du Hilfe suchst, schalte bitte den Kindergartenmodus aus.

Fritz Kadelle
Beiträge: 5
Registriert: So 17. Nov 2013, 15:45
OS, Lazarus, FPC: Windows 7 (Lazarus 1.0.12 FPC 2.6.2)
CPU-Target: 32Bit

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von Fritz Kadelle »

Ich habe den Quelltext entsprechend abgeändert und das Projekt noch einmal als zip-Datei angehängt.
theo hat geschrieben:Wenn du Hilfe suchst, schalte bitte den Kindergartenmodus aus.
Da ich das Problem nicht genau eingrenzen kann, habe ich hier Hilfe gesucht. Ich bin davon ausgegangen, dass es genügt, wenn man sich den oben stehenden Quelltext genauer ansieht. Ich habe mein Problem nicht umsonst unter der Rubrik Einsteigerfragen gepostet. Dabei von Kindergartenmodus zu sprechen, finde ich schon etwas unhöflich.

Wie gesagt, das Testprogramm hat mit den Arrays funktioniert. Erst seit ich für die Daten statt einer einzigen string-Variable Records verwende, habe ich Probleme. Aus diesem Grund kann ich den Quelltext nicht so stark zusammenstauchen. Die Records habe ich jetzt aber auch wesentlich kleiner gemacht.


Grüße
Fritz Kadelle
Zuletzt geändert von Fritz Kadelle am Mi 20. Nov 2013, 21:00, insgesamt 1-mal geändert.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2815
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: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von m.fuchs »

Fritz Kadelle hat geschrieben:Ich denke nicht, dass das Formular nötig ist, die Funktion der einzelnen Buttons ist ja in den Kommentaren erwähnt, ich habe jetzt aber das Projekt dennoch als zip-Datei hochgeladen.
Fritz Kadelle hat geschrieben:Da ich das Problem nicht genau eingrenzen kann, habe ich hier Hilfe gesucht. Ich bin davon ausgegangen, dass es genügt, wenn man sich den oben stehenden Quelltext genauer ansieht.
Ja, man kann dir auch ohne das Programm und nur mit Blick auf den Quellcode etwas raten: programiere sauberer. Das dürfte dein Problem schon lösen. Aber ich vermute mal, das ist nicht unbedingt das was du hören möchtest. :wink:

Nein, hier hilft nur das Projekt mal in Lazarus zu laden und mit dem Debugger durchzuwandern. Das ist Arbeit und kostet Zeit. Von daher ist es druchaus sehr nett, wenn derjenige der das tut sich nicht erst ein Formular zusammenbauen muss. Oder ein Extra-Package installieren muss.

Ich schaue es mir mal nachher an. Unabhängig davon stimme ich theo zu: TStringList und TList wären für dich der bessere Weg. Oder noch besser TObjectList und eine eigene Datenklasse anstelle der Records.
Deine Art der Nutzung von globalen Variablen und die nichtvorhandenen Prüfroutinen zeigen, dass Arrays und ihre Verwaltung vielleicht nicht das Richtige für dich sind. Eine Liste, die alle Elemente selbst verwaltet wäre da schon geeigneter.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Fritz Kadelle
Beiträge: 5
Registriert: So 17. Nov 2013, 15:45
OS, Lazarus, FPC: Windows 7 (Lazarus 1.0.12 FPC 2.6.2)
CPU-Target: 32Bit

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von Fritz Kadelle »

Schon mal vielen Dank, ich werde mir dann wohl mal TStringList und TList sowie TObjectList näher anschauen.

Grüße
Fritz Kadelle

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

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von theo »

Schalte mal bei Projekteinstellungen -> Debuggen -> Überprüfungen -> Bereich ein.
Dann siehst du z.B. dass das Prog. bei TForm1.Button3Click ein Problem hat.
Herauszufinden warum das so ist, ist reine Fleissarbeit. Kannst du selber machen. Es geht eh darum, dass du auf einen Index zugreifst, für welchen kein Speicher reserviert ist.
Mit Listen wäre das Leben etwas leichter.
Fritz Kadelle hat geschrieben: Ich habe mein Problem nicht umsonst unter der Rubrik Einsteigerfragen gepostet. Dabei von Kindergartenmodus zu sprechen, finde ich schon etwas unhöflich.
Auch bei Einsteigerfragen kann man das Material so aufbereiten, dass es den Hilfewilligen keine unnötigen Probleme verursacht.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von pluto »

Mal ein kleiner Hinweis von mir, da ich auch gerne über dies Problem Stolperer, wobei ich auch gerne ein großen Bogen um direkte Array geschweige denn 2D Array's mache:

Bei einem Mehrdimensionale Array muss bei jeder Neuen Zeile, auch die Anzahl der Spalten gesetzt werden. Die Anzahl der Spalten kann sich pro Zeile verändern. Es sei denn du hast einen Statischen "Mehrdimensionale Array".

Ich bin der Meinung, man lernt nur durch Erfahrung. Egal ob die Positiv oder Negativ ist. Dazu zählt auch wie man Richtig fragen stellt. Das musste jeder hier lernen. Auf die eine oder andere Art und weiße.

Ich nutzte um Fehler zu finden z.b. nicht den Debugger, sondern viel mehr writeln. Das ist eine Anweisung, die ich an der Stelle einfüge, wo ich den Fehler vermute. Dann mache ich davon ein paar mehr und sehe wie weit ich komme writeln('Test1'); .. writeln('Test2'); ... writeln('Test3');
Das klappt Prima. Damit habe ich bisher JEDEN Fehler gefunden. Man kann damit auch die meisten Variablen direkt ausgeben lassen:
writeln(MeinVar).
MFG
Michael Springwald

Fritz Kadelle
Beiträge: 5
Registriert: So 17. Nov 2013, 15:45
OS, Lazarus, FPC: Windows 7 (Lazarus 1.0.12 FPC 2.6.2)
CPU-Target: 32Bit

Re: Hilfe bei mehrdimensionalen dynamischen Arrays benötigt

Beitrag von Fritz Kadelle »

So, das Problem hat sich erledigt.

Vielen Dank an alle, die mir weitergeholfen haben.

Antworten