Question

Étant donné une structure, par exemple

typedef struct
{
  int value;
} TestStruct;

Pourquoi le code suivant (dans le contexte d'une classe Objective-C s'exécutant sur l'IPhone) renvoie-t-il un "pointeur non aligné en cours de libération"? exception?

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

N.B. Mon but ultime est d’utiliser une bibliothèque C avec de nombreuses fonctions de calcul vectoriel, d’où la nécessité de trouver un moyen viable de mélanger C et Objective-C

Était-ce utile?

La solution

Il me semble que vous essayez de libérer une pile ou une variable statique. Vous devez avoir malloc () pour pouvoir être libre ().

Essayez plutôt ceci:

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

Pour ceux qui sont plus familiarisés avec les langages orientés objet, vous pouvez trouver utile de créer un constructeur:

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

Ceci vous permet d’allouer une structure et de définir les valeurs en une étape. Rappelez-vous simplement que cette valeur doit être libérée dès qu’elle n’est plus utile:

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

Autres conseils

Parce que vous essayez de libérer quelque chose qui a été alloué sur la pile. La fonction free () ne peut être appelée que sur la mémoire allouée avec malloc ().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top