Betrachten Sie den folgenden Code ein:Müssen wir eine Struktur malloc?
struct Node {
void* data;
int ref;
struct Node* next;
};
typedef struct Node* NodePtr;
ich gefunden habe, dass ich segfaults bin immer wenn ich versuche, mit NodePtr den Feldern nichts zu tun. Z.B .:
NodePtr node;
node->ref = 1;
So zugewiesen ich etwas Platz für die NodePtr, und jetzt scheint es zu funktionieren. Warum ist das? Meine Vermutung ist, dass, da Knoten nur ein Zeiger ist, er keinen Speicher für seine Felder hat. So
Ich versuchte, die NodePtr zu initialisieren:
NodePtr node = {
node->data = 0;
node->next = NULL;
node->ref = 0;
};
Und na ja, ich habe diesen Fehler:
error: expected â}â before â;â token
Dies läuft darauf hinaus, vier Fragen nach unten:
- Wenn meine Vermutung ist falsch, warum funktioniert es nicht, wenn ich malloc() nicht verwende?
- Warum funktioniert meine Initialisierung nicht?
- Würde die Initialisierung einer Struktur Speicher auf dem Stack anbieten und mein Problem lösen?
- Wenn nicht, habe ich eine Alternative zum Speicher für jede Struktur zuweisen, die ich verwende?
Sie brauchen nicht 'malloc'. Zum Beispiel: struct Node n = {NULL, 42, NULL}; Sie haben nur Syntaxfehler überall. – juanchopanza
Sie müssen keinen Speicher zuweisen, wenn Sie ein Objekt ohne Zeiger erstellen. – Ares
Ihre 'NodePtr'-Initialisierung ist nicht einmal die richtige C-Syntax, dies kann nicht der Code sein, den Sie ausprobiert haben. –