Comment libérer une structure C?
-
06-07-2019 - |
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
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 ().