Forum: PC-Programmierung Struct zur Laufzeit erweitern


von Thomas (Gast)


Lesenswert?

Hallo Gemeinde.

Der versuch ist, zur Laufzeit einen "früh-gebundenen" Speicherbereich zu 
vergrößern (ohne Datenverlust).

Ich habe z.B. folgende verschachtelt Struktur:

struct complex
{
   int element1;
   int element2;
   int element3;
}

struct test
{
   int einfacheZahl;
   complex komplexeZahl[10];
   int einfacheZahl2;
}

Ich lege in meiner main()-Routine ein Datum von Typ test an:

main()
{
   test meinContainer;
   tueEtwas();
}

Kann ich nun irgendwie über die Funktion tueEtwas meinen Speicher für 
meinContainer so reallokieren/ausbauen, dass ich nicht 10*komplexeZahl 
habe, sondern 123*komplexeZahl?

1. Wenn ja, wie funktioniert dies in C++?
2. Was passiert mit meinem einfacheZahl2? (der Bereich darf auf keinen 
Fall überschrieben werden!)

Vielen Dank im Voraus.

von Random .. (thorstendb) Benutzerseite


Lesenswert?

1
typedef struct {
2
   int         element1;
3
   int         element2;
4
   int         element3;
5
} complex_t;
6
7
typedef struct {
8
   int         simpleNum1;
9
   complex_t  *complexNum[1024];
10
   int         simpleNum2;
11
} test_t;

So brauchst du "nur" 1k * 4 byte, und holst per malloc den speicher für 
complex komplexeZahl[i] einzelnd.

Ansonsten: Linked List, std:map, std:vector

von Tom (Gast)


Lesenswert?

> Wenn ja, wie funktioniert dies in C++?
std::vector<complex> statt array?

von Karl H. (kbuchegg)


Lesenswert?

Random ... schrieb:

> typedef struct {
>    int         simpleNum1;
>    complex_t  *complexNum[1024];
>    int         simpleNum2;
> } test_t;
>
> So brauchst du "nur" 1k * 4 byte, und holst per malloc den speicher für
> complex komplexeZahl[i] einzelnd.

1 Pointer in der struct tuts auch, an den man ein dynamisch erzeugtes 
Array anbindet.
Aber in C++ ist das alles kein Thema. std::vector wurde ja schon 
genannt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.