PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : datenstrukturen



gorba
09-03-2006, 11:07
hallo

ich stehe bei einem problem an und frage mich wiso.
Bsp:


struct data_type{
unsigned char buffer[20];
int pos;
int size;
};
typedef struct data_type data;

data *queue[100];


soweit zu den deklarationen. Nun will ich auf bestimmte elemente von data über mein array queue zugreifen:



for(i=0 ; i<100 ; i++){
for(n=0 ; n<20 ; n++){
queue[i]->buffer[n] = 0;
}
queue[i]->pos = 0;
queue[i]->size = 0;
}


wiso greife ich hier auf nicht initialisierten speicher zu? das begreife ich nicht ganz. Das Problem muss irgendwie bei dem zugriff auf den pointer auf das struct passieren. also bei queue[]
aber wie und warum und wann?

segmentation fault by: queue[i]->buffer[n] = 0;

blickt da jemand durch?

thx

Boron
09-03-2006, 12:14
Meinst du eventuell: data queue[100]?
Also ohne den Stern nach data?

Du willst vermutlich ein Feld von 100 data-Elementen und nicht ein Feld von 100 Zeigern auf data-Elemente.

gorba
09-03-2006, 12:26
wen ich data queue[100] nehme muss ich danach bei dem zugriff mit & arbeiten.

&queue[i]
das will ich nicht.

ich suche nach der lösung bei der ich mit meinem array von pointern arbeiten kann

peschmae
09-03-2006, 12:53
wen ich data queue[100] nehme muss ich danach bei dem zugriff mit & arbeiten.


Musst du nicht - du musst nur statt -> mit . arbeiten. Also



queue[i].pos = 0;

etc

MfG Peschmä

michael.sprick
09-03-2006, 13:19
Nein, musst Du nicht...

Allerdings darfst Du dann nicht den -> Operator benutzen sondern einfach einen . (Punkt).



data queue[100];

for(...)
{
queue[i].pos = 0;
}


Wenn Du unbedingt Pointer nehmen willst, musst Du natürlich vorher entsprechend Speicher allokieren. Sonst zeigt der Pointer ja ins nichts...



data *queue[100];

for(int i=0;i<100;i++)
{
queue[i] = new data;
queue[i]->pos=0;
}


oder entsprechend mit malloc in C

da war einer schneller.... tabbed browsing :/

gorba
10-03-2006, 11:11
natürlich natürlich....
da ich vorher eine version ohne pointer hatte is mir bei der umstellung wohl n gröber bug unterlaufen, da ich die frage um den speicherplatz total vergessen habe.

das ganze wurde jez nochmal n wenig umgestellt aber macht ja nix. malloc() implementiert, und alle sind glücklich.

Noch zu der frage wiso pointer:
Bei Video streaming fallen viele Daten an. Da isses schnell mal tödlich für ein Prog, wenn es mit den Daten selber arbeiten will und nich mit adressen..

greez