PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit struct



avuton
13-01-2003, 07:46
Hallo kann mir jemand sagen, warum diese Struct nur maximal 99 Elemente haben kann, ich brauche aber ein paar tausend Elemente, wie geht das?
danke


struct namen{
char mvorname[255];
char mnachname[255];
int malter;

};

anda_skoa
13-01-2003, 11:37
Du kannst von dieser Struktur so viele Instanzen anlegen, wie du Speicher hast.

Wahrscheinlich hats du versucht, die n Instanzen am Stack zu erzeugen.
Der Stack ist aber beschränkt.

Am Heap dürften ohne Probleme 1000 Instanten anlegbar sein.

Siehe dazu man malloc und man free.

Ciao,
_

avuton
13-01-2003, 11:47
Naja bei mir sa das so aus und da stürzt das Programm immer ab.
struct namen angab[1000];
also bei mir gingn das nicht.

avuton
13-01-2003, 12:50
Ein Struct ist ja immer so groß, wie alle Elemente, die in dem Struct enthalten snid zusammen, aber es muss doch eine andere Möglichkeit geben ein Struct mit mehr Soeicherplatz anzureichern außer noch mehr Variablen reinzuschreiben.
wenn einer was weis, wäre ich sehr dankbar.
danke avuton

anda_skoa
13-01-2003, 14:37
Original geschrieben von avuton
Naja bei mir sa das so aus und da stürzt das Programm immer ab.
struct namen angab[1000];
also bei mir gingn das nicht.

Ja, wie ich vermutet habe.
Du mußt so große Speicherfelder am Heap anlegen.

also zB


struct namen* angab = 0;
angab = malloc(1000* sizeof(struct namen));
if (angab == 0)
{
// malloc failed
exit(-1);
}

// benutzen wie immer
angab[0].malter = 20;

// am Ende frei geben
free(angab);


Kann sein, dass das nicht 100% korrekt ist, ich mach normalerweise C++

Ciao,
_

ReSeT
13-01-2003, 15:58
Das Ganze lässt sich auch elegant mit einem Array aus Zeigern bestehend lösen,
so belegst Du auf dem Stack gerade mal 4000 Bytes.



#include <stdlib.h>
#include <stdio.h>

#define MAXNAMES 1000

typedef struct namen{
char mvorname[255];
char mnachname[255];
int malter;
}t_names;

t_names *my_names[MAXNAMES];

int i;

int main()
{
for (i=0;i<MAXNAMES;i++)
if ( (my_names[i] = malloc( sizeof ( t_names ) ) ) == NULL ) {
fprintf(stderr,"Memory allocation failed for element %d",i);
return -1;
}

for (i=0;i<MAXNAMES;i++)
strncpy(my_names[i]->mvorname,"Peter",6);

for (i=0;i<MAXNAMES;i++)
fprintf(stdout,"Vorname %d %s\n",i,my_names[i]->mvorname);

for (i=0;i<MAXNAMES;i++)
free(my_names[i]);

return 0;
}


Ich würde allerdings mvorname und mnachname auch dynamisch allozieren.

GreetZ

ReSeT