struct: void-ptr wert zuweisen schlägt fehl
-
Moinsen,
hab in einer struct array einen void ptr drinnen, den ich mit einer variablen deklarieren möchte
#include "index.h" struct _array Array[] = { {(unsigned int *) varptr, ...} };
in index.h hab ich den varptr deklariert:
extern unsigned int *varptr;
Im dazugehörigen c-file Index.c weise ich diesem pointer einen wert zu
unsigned int value = 10; varptr = &value;
Wenn ich jetzt versuche auf den pointer in dem struct array zuzugreifen, schlägt dies fehl, da der pointer die adresse / wert vom integer value nicht beinhaltet. Das struct Array befindet sich in einem zweiten C-file.
Was muss ich ändern, bzw. wie deklarieren damit im Array der Wert / Adresse vom Value (Integer) drinnen steht?
gruß
definer
-
noch einen kleinen zusatz, da ich es vergessen habe:
im Index.c File ist natürlich auch die Var-Definition enthalten:
unsigned int *varptr;
D.h. erst während des Zugriffs auf den void ptr innerhalb des struct arrays tritt der fehler auf.
definer
-
Hmmm. Also:
1.)
hab in einer struct array einen void ptr drinnen, den ich mit einer variablen deklarieren möchte
Dem entnehme ich, daß du einen Zeiger in einer Struktur in einem Array hast. Der Rest ist mir schleierhaft.
2.) Void-Zeiger erkennt man nicht zuletzt daran, daß mindestens einmal im Quelltext das Wort
void
vorkommt. Ich hab's nicht gesehen.3.)
in index.h hab ich den varptr deklariert:
Aber scheinbar falsch, weil's den ja mit globalem Namen gar nicht gibt (soweit ich raten kann). Der liegt doch in dem Array, oder? Also musst du ihn auch noch definieren.
Also bitte etwas klarer!
-
Nachtrag gelesen, folgendes:
4.) Wenn du varptr am Anfang von index.c definierst, kannst du dir die extern-Deklaration zumindest in index.c sparen.
5.)D.h. erst während des Zugriffs auf den void ptr innerhalb des struct arrays tritt der fehler auf.
Bis auf die Definition hast du ja mit dem Struktur-Array gar nichts gemacht! Soll ich's jetzt raten?
-
ok etwas klarer strukturiert:
im File Tabelle.c:
#include "index.h" struct _array { void *ptr; //usw. }; struct _array Array[] = { {(unsigned int *) varptr, ...} };
im index.h steht:
extern unsigned int *varptr;
und im dazugehörigen c-file index.c weise ich diesem ptr einen wert zu.
//globale deklaration unsigned int *varptr; void Init(void) { unsigned int time = 10; varptr = &time; }
Wenn ich jetzt auf den void pointer aus dem struct Array zugreife, zeigt dieser pointer nicht auf die Variable time bzw. dessen Adresse.
Was mich auch stört: muss ich diesen externen Verweis im Headerfile führen? Wenn ich nämlich die Deklaration aus dem C-File in das Headerfile nehme, bringt mir der Linker Fehlermeldungen (die Variable sei öfters deklariert, da dieses Headerfile von mehreren C-Files importiert wird)?
gruß
definer
-
extern-flamer schrieb:
Nachtrag gelesen, folgendes:
4.) Wenn du varptr am Anfang von index.c definierst, kannst du dir die extern-Deklaration zumindest in index.c sparen.
5.)D.h. erst während des Zugriffs auf den void ptr innerhalb des struct arrays tritt der fehler auf.
Bis auf die Definition hast du ja mit dem Struktur-Array gar nichts gemacht! Soll ich's jetzt raten?der zugriff ist
ptype = (unsinged int *)Array[0].ptr;
wobei ptype vom typ void *ptr ist. Hier bekomm ich zwar keine Fehlermeldung allerdings sehe ich nicht den Wert in Array[0].ptr stehen.
gruß