Dynamisches Erweitern von Struktur-Arrays

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Dynamisches Erweitern von Struktur-Arrays

Beitrag von Kiffi »

Hallo Leute,

ich stehe vor folgendem Problem:

Ich habe eine Struktur 'Adressen'. Hierin befinden sich die adressüblichen
Angaben wie z.B. Vorname, Nachname, Telefonnummer etc. Da man
bekanntlicherweise mehr als eine Telefonnummer haben kann, ist sie als
Array definiert. Danach erstelle ich eine LinkListe mit dem Typ der
Struktur.

Nun habe ich jedoch für jede Adresse ein TelefonArray von 10 Elementen
reserviert, obwohl die Masse der Leute in meinem Adressbuch nicht mehr
als zwei oder drei Telefonnummern haben.

Kann das Array in der Struktur dynamisch erweitert/verkleinert werden, so
daß jede Adresse wirklich nur den Speicherplatz belegt, den sie wirklich
benötigt?

Code: Alles auswählen

Structure Adressen
  sVorname.s
  sNachname.s
  sStrasse.s
  sPLZ.s
  sOrt.s
  sTelefon.s[9]
EndStructure

NewList myAddress.Adressen()

AddElement(myAddress())

myAddress()\sVorname = "Peter"
myAddress()\sTelefon[0] = "123"
myAddress()\sTelefon[1] = "456"
myAddress()\sTelefon[2] = "789"
Danke im voraus & Grüße ... Kiffi
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Ich könnte dir jetzt eine Methode anbieten, mit der du dein Problem lösen könntest. Die ist allerdings etwas komplizierter.

Und in diesem Fall hier überwiegend bei mir eher die Methode es einfach so zu lassen wie es ist. Ein leerer Eintrag in einem String-Array belegt gerade mal 4 Bytes. Das ist normalerweise der Platz für den Pointer zum String. Und wenn kein String da ist, ist dieser Null.

Wenn deine Struktur jetzt 3 * 4 oder 3 * 9 Telefoneinträge hat, ist das ziemlich egal, würde ich jetzt mal sagen.

Aber noch etwas anderes. Du hast von 10 Elementen für die Telefonnummern gesprochen. In deiner Struktur, die du hier zeigst, hast du aber nur 9 angegeben. VORSICHT! Bei normalen dynamischen Arrays ist das anders als bei statischen Arrays in einer Struktur.
Gibst du bei dem statischen Array in den Klammern einen Wert von 10 an, hast du auch genau 10 Werte, nämlich von 0 bis 9. Gibst du bei einem normalen dynamischen Array den Wert 10 an, hast du 11 Elemente, nämlich von 0 bis 11.
Benutzeravatar
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Ich könnte dir jetzt eine Methode anbieten, mit der du
> dein Problem lösen könntest. Die ist allerdings etwas komplizierter.


vielen Dank für Dein nettes Angebot, aber Du hast recht:
Die paar Bytes Overhead kann ich verschmerzen ;)

Nochmals Danke & Grüße ... Kiffi
Antworten