IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Pas de Seg Fault lorsqu'on écrit 13 octets dans la mémoire réservé par un malloc(12).


Sujet :

Linux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 74
    Points : 80
    Points
    80
    Par défaut Pas de Seg Fault lorsqu'on écrit 13 octets dans la mémoire réservé par un malloc(12).
    Bonjour,

    Je souhaite faire un programme qui teste la fonction my_strdup().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    char    *my_strdup(const char *s)
    {
         size_t  len;
         char    *dup;
     
         len = strlen(s);
         dup = (char*)malloc(sizeof(char) * (len));
         memcpy(dup, s, len + 1);
         return (dup);
    }
    Cette fonction est dans une bibliothèque compilée que j'inclus à mon projet de test dans lequel je fais appel à la fonction my_strdup(). Dans mon programme de test, je ne sais pas comment mettre en évidence l'erreur au niveau du malloc, il manque un octet pour le '\0', et pourtant, je n'ai pas de Segmentation Fault lorsque j'appel my_strdup().

    Je crois que le malloc() réserve plus de mémoire qu'on ne lui en demande, ce qui m'empêche de mettre l'erreur en évidence, or je veux qu'un appel à cette fonction mette l'erreur en évidence en provoquant un Segmentation Fault, et je ne sais pas comment faire.

    Comment puis-je mettre en évidence cette erreur depuis un programme de test, sans avoir accès à la source de la bibliothèque ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Oui, dans certains cas malloc(); va allouer par défaut 128ko. Tu te retrouves donc dans l'impossibilité de vérifier l'erreur.
    En général, malloc() alloue la mémoire depuis le tas, et ajuste la
    taille du tas en conséquence avec sbrk(2). Lorsque les bloques de
    mémoire alloués sont plus larges que MMAP_THRESHOLD octets, l'implémen‐
    tation de la glibc de malloc alloue la mémoire selon un projection ano‐
    nyme privée avec mmap(2). MMAP_THRESHOLD vaut 128 Ko par défaut et il
    est ajustable avec mallopt(3). Les allocations réalisées avec mmap(2)
    ne sont pas affectées par la limitation de ressource RLIMIT_DATA
    (consultez getrlimit(2)).
    Ceci étant, malloc(); envoie un signal d'erreur dans errno. Ce peut être un bon moyen de repérer le problème
    Le standard UNIX 98 nécessite que malloc(), calloc() et realloc() posi‐
    tionnent errno à ENOMEM en cas d'échec. La glibc suppose qu'il en est
    ainsi (et les versions glibc de ces routines le font).

Discussions similaires

  1. [Seg Fault] introuvable
    Par Goundy dans le forum C
    Réponses: 13
    Dernier message: 14/04/2006, 21h00
  2. Réponses: 2
    Dernier message: 10/04/2006, 19h40
  3. [fclose] erreur de fermeture (seg fault)
    Par Goundy dans le forum C
    Réponses: 17
    Dernier message: 06/04/2006, 13h16
  4. Ne pas soumettre le formulaire lorsqu'on presse ENTER
    Par Amnesiak dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 03/01/2006, 10h51
  5. probleme de valeur retournée et seg fault
    Par florent_de_brest dans le forum C
    Réponses: 5
    Dernier message: 04/12/2005, 16h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo