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 :

question general sur malloc


Sujet :

C

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut question general sur malloc
    bonjour a tous!!
    Voila j'ai juste une petite question
    Si l'on fait par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int v = 2;
    int *i = malloc (v * sizeof (int));
    Normalement tout se passe bien ( en verifiant que le malloc a bien fonctionne...)

    Mais, si on relance avec v = 0;
    on aura donc un malloc (0);
    Quels seraient les consequence de cela?
    Cela peut il entrainer un comportement indefini du programme?

    Merci!

  2. #2
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    salut !

    Je crois que j'avais déjà posé la question jadis
    Du fait de l'alignement des blocs en mémoire ou je ne sais plus quoi, malloc() ne résèrve pas exactement ce qu'on lui demande. Donc même un malloc(0) alloue quand même une certaine quantité de mémoire !
    D'autres vont certainement donner plus de détails !

    Nas'

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut
    d'accord!
    Et tu penses que cela peut entrainer des comportements non desires?

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: question general sur malloc
    Citation Envoyé par vince3320
    Voila j'ai juste une petite question
    Si l'on fait par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int v = 2;
    int *i = malloc (v * sizeof (int));
    Normalement tout se passe bien ( en verifiant que le malloc a bien fonctionne...)
    Mais, si on relance avec v = 0;
    on aura donc un malloc (0);
    Quels seraient les consequence de cela?
    Cela peut il entrainer un comportement indefini du programme?
    D'une façon grossière, oui, c'est un bug. Si on affine la réponse, c'est un comportement spécifié par l'implémentation. C'est donc non portable, mais défini. A éviter, donc.
    Citation Envoyé par N869
    7.20.3 Memory management functions
    1 The order and contiguity of storage allocated by successive calls to the calloc,
    malloc, and realloc functions is unspecified. The pointer returned if the allocation
    succeeds is suitably aligned so that it may be assigned to a pointer to any type of object
    and then used to access such an object or an array of such objects in the space allocated
    (until the space is explicitly freed or reallocated). Each such allocation shall yield a
    pointer to an object disjoint from any other object. The pointer returned points to the
    start (lowest byte address) of the allocated space. If the space cannot be allocated, a null
    pointer is returned. If the size of the space requested is zero, the behavior is
    implementation-defined: either a null pointer is returned, or the behavior is as if the size
    were some nonzero value, except that the returned pointer shall not be used to access an
    object.
    The value of a pointer that refers to freed space is indeterminate.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Euh... certainement oui !
    Si tu fais un malloc(0), une petite quantité est allouée mais tu ne pourras pas utiliser cet espace pour un tableau etc...
    Le malloc(0) tout seul ne fait pas planter le programme mais après, quand tu voudras utiliser cet espace, il y ' aura certainement un comportement indéfini... du moins je pense !

    Nas'

    Edit : Emmanuel a donc répondu à ta question...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 237
    Points : 83
    Points
    83
    Par défaut
    Merci pour vos reponses!!

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il y a une allocation d'au moins PAGE_SIZE sinon un multiple
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hegros
    Il y a une allocation d'au moins PAGE_SIZE sinon un multiple
    Il n'y a pas de 'PAGE_SIZE' dans la définition du langage C. De quoi parles-tu? Dans quel contexte?
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Il n'y a pas de 'PAGE_SIZE' dans la définition du langage C. De quoi parles-tu? Dans quel contexte
    Je parle coté systéme.
    Donc engénéral sur des systémes comme nux....
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

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

Discussions similaires

  1. questions generales sur ruby
    Par nicoser dans le forum Ruby
    Réponses: 12
    Dernier message: 26/12/2006, 14h54
  2. Question générale sur Delphi?
    Par Mickey.jet dans le forum Delphi
    Réponses: 6
    Dernier message: 27/06/2006, 14h45
  3. Question generale sur Swing ?
    Par Sylmandel dans le forum AWT/Swing
    Réponses: 14
    Dernier message: 05/05/2006, 11h37
  4. Question générale sur les scripts linux
    Par jejerome dans le forum Linux
    Réponses: 4
    Dernier message: 09/04/2006, 08h25
  5. question general sur triggers (liaison avec VB)
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 15h57

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