Come liberare una struttura C?
-
06-07-2019 - |
Domanda
Data una struttura, ad esempio
typedef struct
{
int value;
} TestStruct;
Perché il seguente codice (nel contesto di una classe Objective-C in esecuzione su IPhone) genera un puntatore "non allineato" che viene liberato " eccezione?
TestStruct ts = {33};
free(&ts);
NB. Il mio obiettivo è utilizzare una libreria C con molte funzioni matematiche vettoriali, quindi la necessità di trovare un modo praticabile per mescolare C e Objective-C
Soluzione
Mi sembra che tu stia cercando di liberare uno stack o una variabile statica. Devi avere malloc () 'd qualcosa per poter essere libero ()' d.
Prova invece:
TestStruct *ts = malloc(sizeof(TestStruct));
ts->value = 33;
free(ts);
Per coloro che hanno più familiarità con i linguaggi orientati agli oggetti, potresti trovare utile creare un costruttore:
TestStruct *newTestStruct(int value)
{
TestStruct *ret = malloc(sizeof(TestStruct));
ret->value = value;
return ret;
}
Ciò consente di allocare una struttura e impostare i valori in un solo passaggio. Ricorda solo che questo valore dovrebbe essere liberato quando non sarà più utile:
TestStruct *x = newTestStruct(3);
free(x);
Altri suggerimenti
Perché stai cercando di liberare qualcosa che è stato allocato nello stack. La funzione free () può essere richiamata solo sulla memoria allocata con malloc ().