Si consideri il seguente codice:Dobbiamo malloc una struttura?
struct Node {
void* data;
int ref;
struct Node* next;
};
typedef struct Node* NodePtr;
ho scoperto che sto ottenendo segfaults ogni volta che provo a fare qualsiasi cosa con i campi di NodePtr. Es .:
NodePtr node;
node->ref = 1;
Così ho assegnato po 'di spazio per il NodePtr, e ora sembra funzionare bene. Perchè è questo? La mia ipotesi è che poiché il nodo è solo un puntatore, non ha memoria per i suoi campi.
così ho cercato di inizializzare la NodePtr:
NodePtr node = {
node->data = 0;
node->next = NULL;
node->ref = 0;
};
E bene, ho ottenuto questo errore:
error: expected â}â before â;â token
Questo riduce a quattro domande:
- Se la mia ipotesi non è corretto, perché non funziona se non utilizzo malloc()?
- Perché la mia inizializzazione non funziona?
- Inizializza una memoria di offerta di struttura nello stack e risolve il mio problema?
- In caso contrario, devo un'alternativa a dover allocare memoria per ogni struct che uso?
Non è necessario 'malloc'. Ad esempio, 'struct Node n = {NULL, 42, NULL};'. Hai solo errori di sintassi dappertutto. – juanchopanza
Non è necessario allocare memoria se si sta creando un oggetto non puntatore. – Ares
L'inizializzazione 'NodePtr' non è nemmeno corretta sintassi C, questo non può essere il codice che hai provato. –