Allocation et libération de mémoire.

Résolu
CoDForlan Messages postés 44 Date d'inscription   Statut Membre 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.

1 réponse

CoDForlan Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   1
 

Problème résolu !

l'erreur vien de la:
 

struct card* deck52 = (struct card*)malloc(52 * sizeof(struct card));
    if(!deck52){
        return -1;
    }
    deck52 = create_deck();

il faut écrire:

struct card* deck52 = create_deck();
    if(!deck52){
        return -1;
    }
1