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 en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut allocation en C
    salut ,
    je cherche un peu a aprofondir mes connaissances en C.
    J'ai le petit bout de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* str2 = (char*) malloc(sizeof (char)*30);
    	str2 = "bisounours";
    je voulais faire en sorte d'allouer a str2 une place dans la memoire, pour ensuite (a la ligne suivante) atribuer une valeur dans cette place memoire.
    Seulement voila, je remarque que mon OS a file a str2 une toute autre adresse.
    Pourquoi c'est comme ca?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Par défaut
    Bonsoir,

    A la 2e ligne, tu a affecté à str2 l'adresse de la zone mémoire qui contient la chaîne constante "bisounours"

    Il faut utiliser la fonction "strcpy" pour copie la valeur "bisounours" dans la zone que tu as alloué par malloc.

  3. #3
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    ce que tu me dis semble logique, mais me parait tout de meme un peu bizarre
    Admettons une troisieme ligne ou j'ecrirai:
    d'apres ce que tu me racontes, je devrais voir str2 pointer vers l'adresse en memoire ou "coucou" est ecrit?!

    Tu as raison, j'ai teste.... Et c'est exactement ce qui se passe?!
    Je comprends pas trop....

  4. #4
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut pointeur et passage a fonctions
    Permets moi de poser une autre questions pas trop en rapport avec le sujet de ce topic.

    admetons que j'ai dans le main 2 char* que je passe a une fonction void foo(char* str1, char* str2).
    Dans le corps de cette fonction je manipule les pointeurs str1 et str2 (je les fais pointer ailleur).
    Je remarque tout de meme que lorsque je reviens dans le main les pointeurs pointent a leurs adresses d'origine.

    Que s'est il passe?
    merci

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ne serait-ce pas plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char* str2 = (char*) malloc(sizeof (char)*30);
    strcpy(str2 , "bisounours");
    que tu souhaites faire ? Allouer l'espace mémoire, et y recopier la chaine "bisounours" ? (Comme te l'a indiqué darth_vader).

    Citation Envoyé par IsraGab Voir le message
    admetons que j'ai dans le main 2 char* que je passe a une fonction void foo(char* str1, char* str2).
    Dans le corps de cette fonction je manipule les pointeurs str1 et str2 (je les fais pointer ailleur).
    Je remarque tout de meme que lorsque je reviens dans le main les pointeurs pointent a leurs adresses d'origine.
    C'est normal, tu travailles sur des copies des pointeurs, la seule chose que tu peux changer, c'est le contenu de l'adresse vers laquelle ils pointent, et non l'adresse.
    Si tu veux pouvoir faire cela, il te faut passer un pointeur de pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void foo(char** str)
     
    *str = ...

  6. #6
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Merci,
    C'est normal, tu travailles sur des copies des pointeurs, la seule chose que tu peux changer, c'est le contenu de l'adresse vers laquelle ils pointent, et non l'adresse.
    Si tu veux pouvoir faire cela, il te faut passer un pointeur de pointeur :
    Ou bien une reference, non?

Discussions similaires

  1. Allocation dynamique de structures
    Par fr_knoxville dans le forum C
    Réponses: 8
    Dernier message: 06/05/2003, 21h59
  2. Allocation dynamique de mémoire en asm
    Par narmataru dans le forum Assembleur
    Réponses: 7
    Dernier message: 17/12/2002, 22h31
  3. Réponses: 4
    Dernier message: 03/12/2002, 16h47
  4. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  5. Allocation de ressources
    Par Eric Pasquier dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/10/2002, 09h19

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