Allocation et libération de mémoire.
Résolu
CoDForlan
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour, je suis en train de faire un programme concernant le poker. J'ai créé une fonction dans laquelle j'alloue 52 struct card, comme indiqué ci-dessous :
struct card{ int value; char suit; int already_taken; };
struct card* create_deck(){ struct card* deck = (struct card*)malloc(52 * sizeof(struct card)); if(!deck){ return NULL; } // initialize the cards for (int i = 0; i < 52; i++) { deck[i].value = (i % 13) + 2; deck[i].already_taken = 0; if (i < 13) deck[i].suit = 'C'; // carreaux else if (i < 26) deck[i].suit = 'T'; // trefles else if (i < 39) deck[i].suit = 'H'; // coeurs else deck[i].suit = 'P'; // pique } return deck; }
dans le main:
int main(){ struct card* deck52 = (struct card*)malloc(52 * sizeof(struct card)); if(!deck52){ return -1; } deck52 = create_deck(); //code... free(deck52); return 0; }
Ensuite, j'ai analysé avec l'outil Dr. Memory pour vérifier s'il y avait des fuites, et il y a bel et bien des fuites de mémoire dans la fonction create_deck. Cependant, je ne vois pas où je devrais placer mon free(deck).
Si quelqu'un pourrait m'éclairer, merci pour vos futures réponses. Genoce.
A voir également:
- Allocation et libération de mémoire.
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Comment liberer de l'espace sur gmail - Guide
- Nettoyer memoire iphone - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
Salut CoDForlan,
Effectivement ton code écrasait le pointeur vers de la mémoire déjà allouée.
Une observation sur ta structure de données pour créer ton paquet de cartes :
Si already_taken sert à déterminer si la carte a déjà été piochée, je ne ferais pas cela et je retirerais ce champ de la struct.
Tu peux simplement :
Pour piocher les suivantes, tu incrémentes l'indice à mesure que tu prends des cartes.
Tu dois donc seulement garder trace de l'indice de la carte qui correspond à celle qui est "au dessus du paquet".