Frage

Bei einer Struktur, z.

typedef struct
{
  int value;
} TestStruct;

Warum wird der folgende Code (im Rahmen einer Objective-C-Klasse läuft auf dem iPhone) wirft ein „nicht-ausgerichteten Zeiger befreit“ Ausnahme?

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

N. B. Mein uber Ziel ist, eine C-Bibliothek mit vielen Vektor-mathematischen Funktionen zu verwenden, damit die Notwendigkeit, einigen gangbaren Weg, um herauszufinden, C und Objective-C

mischte
War es hilfreich?

Lösung

Es scheint mir, wie Sie versuchen, einen Stapel oder statische Variable zu befreien. Sie müssen malloc haben () ‚d etwas für sie in der Lage sein, frei zu sein ()‘ d.

Versuchen Sie stattdessen:

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

Für die mehr vertraut mit objektorientierten Sprachen, könnten Sie finden es hilfreich, einen Konstruktor zu erstellen:

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

Dies ermöglicht Ihnen, eine Struktur zuordnen und die Werte in einem Schritt gesetzt. Denken Sie daran, dass dieser Wert soll befreit werden, sobald es nicht mehr sinnvoll:

TestStruct *x = newTestStruct(3);
free(x);

Andere Tipps

Weil Sie versuchen, etwas zu befreien, die auf dem Stapel zugeordnet wurde. Die Funktion free () kann nur auf Speicher aufgerufen werden, der mit malloc () zugewiesen wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top