• # Plusieurs remarques

    Posté par . En réponse au message Effacer un pointeur fournit par une librairie externe. Évalué à 3.

    Déjà en C++ on aura plus tendance à utiliser "new" que "malloc". Enfin ça marche de toute façon, ça n'est pas le problème.


    Ensuite, si une zone mémoire est allouée avec "new", alors il faut la libérer avec "delete", si elle est allouée avec "new[]", on la libère avec "delete[]" et si elle est allouée comme en C avec malloc ou calloc ou les autres variantes, on la libère avec free.

    "Est il autorisé d'éffacer un pointeur alloué ailleur" n'a pas vraiment de sens en C ou en C++. On peut libérer un pointeur qui a été alloué par le processus courant. On ne peut pas libérer deux fois le même pointeur, ni libérer une adresse mémoire invalide

    Un petit exemple qui plante forcément :

    char * pointer = malloc(3);
    int i = 0;
    for (i = 0; i < 3; i++)
    *pointer++ = 0;

    free(pointer);

    --> on aura une erreur puisqu'on essaye de libérer une zone mémoire invalide.

    Sans en savoir plus, je pencherais sur un problème du type expliqué ci-dessus, ou alors tout simplement la zone mémoire libérée est utilisée ensuite dans un traitement ultérieur.