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

C Discussion :

Erreur de sgmentation avec malloc


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Erreur de sgmentation avec malloc
    Bonour,

    Je suis en train de developper (enfin debugger maintenant) un projet, et j'ai des erreur de segmentation regulières.
    a chaques fois, ces erreurs sont causées par un malloc, mais jamais le meme, et pas a chaques fois ....

    Je me demande donc quelles peuvent en etre les causes ...

    Dans quels cas malloc provoque il une erreur de segmentation ?
    J'ai initialisé tous mes pointeurs a NULL avant d'y allouer de la mémoire, pensant que j'allouais sur des espaces reservé, mais ca change rien ...
    J'ai rajouté recemment une fonction qui utilise realloc, et c'est depuis ce moment que les erreurs se repetent ... y'a til un rapport ?

    Enfin, si quelqu'un peu m'en dire plus, ca m'aiderais ...

    Merci d'avance.

    (Je programme en c sous linux, avec gcc 3.2.)

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 23
    Points : 27
    Points
    27
    Par défaut Un bug Linux
    Hallu

    J'ai vu des pages web qui traite de ce probléme.
    En fait Linux pratique la sur-réservation : malloc retourne un pointeur sans vraiment allouer de mémoire. Elle sera effectivement allouée lorsque la première ecriture sera faite. Le système peut alors découvrir qu'il ne reste pas de mémoire disponible et terminer le processus par un "segmentation fault".
    D'ailleurs, ce comportement (élégamment nommé overcommit) est paramétrable. echo 0 > /proc/sys/vm/overcommit_memory permet de ne pas avoir ce comportement. Cette solution peut s'avérer gênante pour exécuter certains programmes peu subtils.

  3. #3
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    salut

    je savais pas ca ...
    toujours est il que ce fichier etait deja a 0.

    Mon programme utilise bcps d'allocations dynamiques ... y aurait il une limite de memoire pour les allocations ?

    Merci

    ++

  4. #4
    Membre émérite

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Points : 2 717
    Points
    2 717
    Par défaut
    Euh ... A mon avis, c'est pas aussi compliqué que ça. Commence par vérifier tes écritures en mémoire : quand tu écris en dehors de la mémoire allouée, le programme prend un comportement aléatoire. Vérifie également que malloc ne renvoie pas NULL. Si tu écris dans un pointeur NULL, c'est un SEGV à tous les coups !

    @+ Haypo

  5. #5
    Candidat au Club
    Inscrit en
    Février 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ouais, c'est possible que je deborde par moment, je vais faire tout un tas de controles suplementaires ...
    J'aimerais bien que malloc me renvoie ne serait-ce que NULL ... car c'est le malloc qui me produit le SEGV, pas ce qui se passe apres, c'est d'autant plus chiant a debugger ..

    ++

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Points : 57
    Points
    57
    Par défaut
    il est trés fort posssible que deborde dans la memeoire.
    malloc renvois NULL s'il n'arrive pas trouver de la meme libre.
    or la c'est un autre probleme:
    malloc fonctionne avec une sorte de liste chainée des blocs libre.
    il stocke des informations (comme le pointeur suivant dans la table, le pt precedent, la taille...) avant les blocs memoire qu'il te renvois.
    Si tu déborde d'un espace alloué, tu as de grande chance d'écraser les info de l'espace suivant ==> erreure de segmenattion car malloc ne se retrouve plus dans ses pointeurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur de compilation avec malloc
    Par win-pierre dans le forum C++
    Réponses: 8
    Dernier message: 25/04/2008, 13h11
  2. Erreur ORA-12514 avec database link
    Par gafreu dans le forum Administration
    Réponses: 20
    Dernier message: 09/09/2004, 12h53
  3. Erreur sur IIS avec des cripts ASP
    Par Alin dans le forum ASP
    Réponses: 7
    Dernier message: 22/06/2004, 15h15
  4. erreur tcp/ip avec jdbc
    Par champion dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 03/04/2004, 15h32
  5. Erreur windows lors du malloc
    Par Elessar dans le forum C
    Réponses: 5
    Dernier message: 16/12/2003, 09h53

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