Je suis en train de libérer la mémoire du tableau alloué à l'intérieur struct _Stack
, mais le programme se bloqueComment libérer une mémoire allouée dynamiquement à un tableau dans une structure?
typedef struct _Stack
{
int top;
unsigned int capacity;
int* arr;
}_Stack;
_Stack* createStack(int capacity)
{
_Stack* stack = (_Stack*) malloc(sizeof(_Stack));
stack->capacity = capacity;
stack->top = -1;
stack->arr = (int*) malloc(sizeof(stack->capacity * sizeof(int)));
return stack;
}
J'utilise cette fonction pour libérer la mémoire, mais le programme se bloque ici.
// I have a problem here.
void stack_free(_Stack* stack)
{
free(stack->arr);
free(stack);
}
Si vous programmez en C++, pourquoi utilisez-vous 'malloc' et' free'? Si vous devez utiliser des pointeurs, utilisez d'abord un * pointeur intelligent * comme par ex. ['std :: unique_ptr'] (http://en.cppreference.com/w/cpp/memory/unique_ptr), et vous devriez certainement utiliser' new [] 'et' delete [] 'au lieu de' malloc' et 'free'. Cependant, si les pointeurs ne sont pas obligatoires, vous devriez utiliser ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector) à la place. –
Montrez-nous tout le code qui provoque cela et peut être exécuté (MCVE). N'utilisez pas non plus underscore-capital dans les noms (réservés). – lorro
Je vous recommande également de prendre le temps de lire [Quelles sont les règles d'utilisation d'un trait de soulignement dans un identifiant C++?] (Http://stackoverflow.com/questions/228783/what-are-the-rules-about-using- an-underscore-in-ac-identifier) Les symboles commençant par un trait de soulignement suivi d'une lettre majuscule (comme par exemple '_Stack') sont réservés. –