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 memoire et management de la memoire


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Points : 38
    Points
    38
    Par défaut Allocation memoire et management de la memoire
    Bonjour la communaute,

    voila pour etre franc, une boite me demande de repondre a ces questions en moins de 48 heures et quelques soient les moyens utilises, je dois repondre correctement a toutes ces questions, meme si les reponses ne viennent pas de moi.

    Si au moins l'un d'entre vous pouvez repondre a ces questions pour que je compare avec ce que je vais repondre de mon cote, ca serait super sympa ... j'ai besoin de reponses des plus professionnels d'entre-vous, car moi je suis seulement intermediaire.

    Merci d'avance pour votre temps.

    -----------------------------------------

    Please be sure to mention MEMORY MANAGEMENT AND MEMORY ALLOCATION, specifically, in your answers.

    Skill Assessment Sheet

    Line
    Contains


    50
    char *b, q, *r;

    200
    b = getbuf ();

    201
    q = *b;

    212
    R = anotherfunction (b);

    213-2003
    /* we want to use 'q' and 'r' here */

    2000
    char * getbuf ()

    2001
    {

    2002
    char buff [8];

    2003-2050
    /* unspecified buff defined here */

    2051
    return (char*) buff;

    2052
    }


    1. What will be in variable 'q' after line 201 is executed? Under what conditions might this not be so?

    2. Is there an alternative, but equivalent, way to write line 2000? If so, what is it?

    3. Is getbuf() a reasonable function?

    4. Will getbuf() execute at all?

    5. Please comment on line 2051.

    6. Is getbuf() good practice, and why?

    7. What line not given should be provided for compilation?

    8. How, exactly, could one get a second 'char*' to use back from this function? Be specific in terms of the exact syntax needed. (That is, provide code.) Another way to state this question is how can this function be modified to return a 'char*' (that is, it maintains the same return type) from the function, and an additional 'char *' value in one function call. Please make sure that your answer will work even if the size of the char * desired is not known in the outside calling function. Avoid (do no use) C++ syntax. Include statement in called and calling functions. Use food programming practice.



    9. For those candidates who know SQL: There is a table with gene_ids ('gid') and clone_ids ('cid'). Each gene only resides on a single clone and each clone may contain multiple genes. How do would you find how many genes are on each and every clone? Please provide the SQL.



    10. What's the difference between system calls and library functions?

  2. #2
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    1. What will be in variable 'q' after line 201 is executed? Under what conditions might this not be so?
    [edit]
    Dans la fonction getbuf() il y a un problème d'allocation de mémoire. En raison de se problème, le management de la mémoire système implique que b prend une valeur indéterminée par l'assignation à la valeur de retour de getbuf. Donc le déréfencment de b, assigné à la variable q est indéterminé.
    [Avant j'ai écris]
    Le code de la fonction getbuf() est faux : La fonction renvoit l’adresse d’une variable locale. Donc q à la ligne 201 prend une valeur indéterminée et invalide surtout.

    2. Is there an alternative, but equivalent, way to write line 2000? If so, what is it?
    je ne vois que ça : char *getbuf( void).
    La question n’est pas assez précise.

    3. Is getbuf() a reasonable function?
    [L'implémentation n'est pas raisonable car elle renvoit une adresse mémoire volatile et locale à une fonction. Le résultat de getbuf est un pointeur mémoire qui est désalloué par le management de la mémoire.

    [Avant j'ai écris]
    Non, car cette fonction renvoie un pointeur sur une variable locale, qui n’existe pas en dehors de getbuf().

    4. Will getbuf() execute at all?
    [edit]
    Hélas, c'est la tout le problème, cette fonction s'exécute correctement car il n'y as pas d'erreur d'allocation mémoire mais un problème de management de la mémoire.

    [Avant j'ai écris]
    La traduction de la question please

    5. Please comment on line 2051.
    Il est inutile de caster en char * car buff est un tableau. Il est incorrect de renvoyer l’adresse de buff car c’est une variable locale, le pointeur est non déterminé en sortie de getbuf().

    6. Is getbuf() good practice, and why?
    Non, pour les raisons déjà expliquées : L’allocation mémoire allouée à la variable buff locale à getbuf() est désallouée en sorti de fonction en raison du management de la mémoire par l’OS. De plus, buff n’est pas assigné, son contenu est indéterminé quoi qu’il arrive.

    Il faut utiliser l'allocation dynamique de la mémoire, allouer buff par malloc. Mais cette solution oblige l'appelant à manager la mémoire lui-même. Elle peut aboutir à des fuites mémoire.

    7. What line not given should be provided for compilation?
    Je ne suis pas sûr de comprendre.

    8. How, exactly, could one get a second 'char*' to use back from this function? Be specific in terms of the exact syntax needed. (That is, provide code.) Another way to state this question is how can this function be modified to return a 'char*' (that is, it maintains the same return type) from the function, and an additional 'char *' value in one function call. Please make sure that your answer will work even if the size of the char * desired is not known in the outside calling function. Avoid (do no use) C++ syntax. Include statement in called and calling functions. Use food programming practice.

    Si j’ai compris, ce qui n’est pas sûr, voilà le prototype :

    char *getbuf(char *buff, int *Size) ;

    Puisque l’appelant ne connaît pas a priori la taille de la chaîne supplémentaire, il est obligatoire de la passer en argument, modifiable. Donc si Size vaut NULL, la fonction lit cette chaîne supplémentaire et retourne sa taille par le biais de Size.

    9. For those candidates who know SQL: There is a table with gene_ids ('gid') and clone_ids ('cid'). Each gene only resides on a single clone and each clone may contain multiple genes. How do would you find how many genes are on each and every clone? Please provide the SQL.

    Heu ? Il me manque un bout de l ‘ennoncé non ? Je passe.

    10. What's the difference between system calls and library functions?
    Je ne vois pas ce qu’ils demandent.


    Tu me diras si j’avais juste J'aimerais aussi savoir si l'Amérique est sympa pour le travail d'ingénieur.

  3. #3
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    0- On n'est pas là pour faire des exercices.

    0.bis- mauvais forum. Il suffit de lire le "pas de syntaxe C++". Car un bon auto_array des familles ou autre std::string faisait l'affaire et réglait tout ces problèmes à la noix.

    7- prototype nécessaire

    4- Il demande si "cela ne s'exécutera jamais ?"

    2- const char * ? Il connait le C99, non ?

    9- Ce n'est définitivement pas le bon forum.

  4. #4
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Désolé Luc, mais le char *, l'allocation de mémoire et le C de manière générale, font parti du C++ aussi.

    Mais, à moins d'y être obliger, il vaut mieux passer par la STL.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup Caine, je ne manquerai pas de te tenir au courant des atentes de cette boite, des conditions, du salaire et tout si je parviens un peu plus loin en entretiens ...

    Et desole de m'etre trompe de forum ... j'ai mis du temps pour comprendre que c'etait que du C ... au tel, le gars m'avait parle de C++ donc j'avais c aen tete en postant les questions.

    MErci encore pour l'aide, c super sympa, je vais renvoye toutes mes reponses demain.

    J'ai une derniere question ... parce que j'ai plus mon bouquin Strousprout sous la main ... le tableau buff cree dans la fonction ... imaginons que l'on le remplie avec des caracteres ... on renvoit l'adresse de la premiere case comme dans getbuf ... et la fonction se termine ... alors le tableau est desaloue, que se passe t-il exactement au niveau memoire??

    Est-ce que le contenu de la memoire est efface, ou simplement buff n'existe plus ... dans ce cas, b qui a pris l'adresse avant la desalocation de buff peut acceder a ces caracters, non??

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Est-ce que le contenu de la memoire est efface, ou simplement buff n'existe plus ... dans ce cas, b qui a pris l'adresse avant la desalocation de buff peut acceder a ces caracters, non??
    buff n'existe plus et la mémoire qui lui avait été allouée (sur la pile) est disponible et peut être à nouveau utilisée. Donc b ne peut accéder aux caractères qui très probablement ont été effacés, tout ou partie, par autre chose

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juillet 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 51
    Points : 38
    Points
    38
    Par défaut
    Merci diogene, donc b contiendra quelque chose qui peut etre le bon caractere si rien d'autre n'a remplace cette partie de la memoire ... mais ca peut changer n'importe quand ....

    Merci j'ai capte.

  8. #8
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Citation Envoyé par Caine
    Désolé Luc, mais le char *, l'allocation de mémoire et le C de manière générale, font parti du C++ aussi.

    Mais, à moins d'y être obliger, il vaut mieux passer par la STL.
    C'est surtout qu'il vaut mieux viser le plus petit dénominateur commun. Plus de gens, tout ça. (Et puis, ce n'est pas comme si il n'y avait pas eu de "pas de syntaxe C++")

    3- Au fait, ce n'est pas si simple:
    () <=> (void) [modulo C++]
    () <=> (...) [modulo C]

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Luc Hermitte
    3- Au fait, ce n'est pas si simple:
    () <=> (void) [modulo C++]
    () <=> (...) [modulo C]
    S'il y avait que ça :
    Les incompatibilités entre le C et le C++

  10. #10
    Membre éprouvé Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Points : 1 122
    Points
    1 122
    Par défaut
    Cet article est intéressant.

    Cependant, il aurait été utile de connaître les compilateurs utilisés.

    Par exemple sur le tableau des char, je n'ai jamais eu le souci avec gcc/g++, et borland C++ 4.

    Le site de Bjarne Stourtrup (j'ai encore dû écorché son nom, qu'il me pardonne ) est exhaustif sur le sujet.

Discussions similaires

  1. Fuite memoire et taille de la memoire du process
    Par ricky78 dans le forum MFC
    Réponses: 4
    Dernier message: 01/12/2008, 17h02
  2. Réponses: 0
    Dernier message: 24/11/2008, 13h02
  3. [APPLET][MEMOIRE] probleme de liberation de memoire
    Par magnus2005 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 28/02/2007, 15h21
  4. allocation et management de la memoire
    Par micamused dans le forum C
    Réponses: 12
    Dernier message: 15/11/2005, 00h20
  5. allocation et desallocation de memoire
    Par barthelv dans le forum C
    Réponses: 7
    Dernier message: 22/06/2004, 13h23

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