PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++ Variablenzuweisung über Zeiger



DanDanger
20-02-2003, 21:56
Hallo,

ich hab' da mal wieder so ein typisches C/C++ Zeiger-Problem :
in meiner entitySys.h gibt es ein struct namens "entity" :



entitySys.h :

typedef struct
{
float RotX ;
float RotY ;
(.......)
} entity ;

extern entity *User ;


Nun sollen den Werten RotX und RotY float-Werte zugewiesen werden.
Da der Zeiger auf User extern Definiert ist (und in der entitySys.c auch definiert wird), sollte das ja kein Problem sein.

Wenn ich aber nun in der main.c :




main.c :

#include "entitySys.h"

(.......)
User->RotX = floatWert ;
User->RotY = floatWert ;
(.......)


ausführe, kommt es zu einem Segmention-Fault (Speicherzugriffsfehler) :-(

Meine Frage : WARUM ?????
Was mache ich Falsch, schliesslich weise ich den Variabeln, und nicht den Speicheradressen die Werte zu ?

Verzweifelte Grüsse
DanDanger

arthur
20-02-2003, 22:14
ganz einfach, du legst zwar in entitySys.h ein zeiger auf deine struktur
aber du reservierst kein speicher dafür (mit new).
deswegen hat der zeiger in main einen zufälligen wert und wenn du
versuchst da reinzuschreiben kommt es zu dem Speicherzugriffsfehler

anda_skoa
20-02-2003, 22:14
Du schreibst, das User in entitySys.c definiert wird.
Kannst du uns diesen Code vielleicht auch zeigen?

Wird dort auch Speicher reserviert?

Ciao,
_

micha
20-02-2003, 22:16
Hi,


Original geschrieben von DanDanger
Meine Frage : WARUM ?????
Was mache ich Falsch, schliesslich weise ich den Variabeln, und nicht den Speicheradressen die Werte zu ?


Du solltest für den Zeiger auf die Struktur auch Speicher alloziiern ;)



#include <malloc.h>

entity *User = NULL;

int main (void)
{
if (NULL == User && NULL == (User = (entity*)malloc (sizeof (entity*))) {
/*Speicher konnte nicht alloziiert werden*/
return (1);
}

User->RotX = 3.0;
User->RotY = 1.0;

return (0);
}


Gruß micha

DanDanger
21-02-2003, 16:09
Danke Leute,

die Sache mit dem Speicher Resevieren war's. :p