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 :

Allocation avec sbrk, probleme sur les void*


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Par défaut Allocation avec sbrk, probleme sur les void*
    Salut,
    voila j'ai un petit problème avec les void *. et sbrk
    Je souhaites alloquer n octec + sizeof(struct k). (sans utiliser malloc en nmap).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef struct k
    {
     int   i;
     int   j;
    };
    void    *function_allocation(unsigned int size)
    {
     void    *test;
     
     test = sbrk(size + sizeof(struct k));
     return (test);
    }
    Je souhaiterai avant de retourner le pointeur test, d'initialiser ma structure k.
    par exemple k.i = 21.
    Je n'arrive pas à trouver comment faire.
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 462
    Par défaut
    Citation Envoyé par flov91 Voir le message
    Je souhaites alloquer n octec + sizeof(struct k). (sans utiliser malloc en nmap).

    Je souhaiterai avant de retourner le pointeur test, d'initialiser ma structure k.
    par exemple k.i = 21.
    Autant que je sache, brk() et sbrk() servent à définir la taille du segment de données du processus. Celui-ci contient déjà des données, en plus du tas exploité par malloc(). Tu ne peux donc pas utiliser le nouvel espace réservé à ta guise puisque tu ne sais pas comment est structuré le segment.

    Tu sembles vouloir ajouter de la place en fin de segment, suivie par une structure. Cette structure serait donc la dernière chose que le segment contient. Tu cours à un plantage quasiment garanti à plus ou moins long terme mais si tu veux quand même initialiser cette structure à cet endroit et pas un autre, tu peux récupérer l'adresse du début du segment avec sbrk(), déterminer la taille du segment avec getrlimit(), en déduire l'adresse de fin du segment, et y retrancher la taille de ta structure avec sizeof(). Tu transtypes alors le pointeur obtenu vers ta structure et tu initalises ses champs avec ->.

    La question est : pourquoi veux-tu faire une chose pareille ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 262
    Par défaut
    La question est : pourquoi veux-tu faire une chose pareille ?
    Ca ressemble a un exercice scolaire.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 6
    Par défaut
    On me demande de recoder les fonctions malloc, realloc et free, avec les fonction brk et sbrk.

    Pour la fonction malloc, j'utilise donc la fonction sbrk afin pour augmenter la taille du segment de données du processus et je rajoute également une liste chainée pour récupérer la position des divers segment de données.

    Mon problème venait du transtypage du pointeur. Il a été réglé.


    Merci pour la réponse.

    P.S : Pourquoi "un plantage quasiment garanti à plus ou moins long terme" ?

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

Discussions similaires

  1. Probleme sur les UL LI avec un background
    Par boutmos dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 21/12/2007, 19h38
  2. probleme sur les chaines de caractere
    Par foufi5 dans le forum C
    Réponses: 8
    Dernier message: 22/12/2005, 15h30
  3. [C#] Probleme sur les clés primaires composites
    Par stardeus dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/02/2005, 23h28
  4. MS Access et TQuery (probleme sur les dates)
    Par Djob dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2004, 14h57
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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