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

È stato utile?

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 ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top