Hvordan frigjøre C struct?

stemmer
4

Gitt en struct, f.eks

typedef struct
{
  int value;
} TestStruct;

Hvorfor følgende kode (i sammenheng med en Objective-C klasse kjører på IPhone) kaste en ikke-justert pekeren blir frigjort unntak?

TestStruct ts = {33};
free(&ts);

NB Min uber Målet er å bruke en C-bibliotek med mange vektor matematiske funksjoner, derav behovet for å finne ut noen levedyktig måte å blande C og Objective-C

Publisert på 08/01/2009 klokken 17:45
kilden bruker
På andre språk...                            


2 svar

stemmer
25

Det ser for meg ut som du prøver å frigjøre en stabel eller statisk variabel. Du må ha malloc () 'd noe for at det skal være i stand til å være gratis ()' d.

Prøv dette i stedet:

TestStruct *ts = malloc(sizeof(TestStruct));
ts->value = 33;
free(ts);

For de mer kjent med objektorienterte språk, kan du finne det nyttig å lage en konstruktør:

TestStruct *newTestStruct(int value)
{
    TestStruct *ret = malloc(sizeof(TestStruct));
    ret->value = value;
    return ret;
}

Dette gjør det mulig å tildele en struct og sett verdiene i ett trinn. Bare husk at denne verdien skal bli frigjort når det ikke lenger er nyttig:

TestStruct *x = newTestStruct(3);
free(x);
Svarte 08/01/2009 kl. 17:48
kilden bruker

stemmer
7

Fordi du prøver å frigjøre noe som ble tildelt på stakken. Funksjonen fri () kan bare kalles minne som ble tildelt med malloc ().

Svarte 08/01/2009 kl. 17:47
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more