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 :

Recherche de sous-chaine


Sujet :

C

  1. #21
    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
    Un détail sur la terminologie : dans la version 1, le tableau n'est pas en allocation statique mais en allocation automatique
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  2. #22
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ouaip. Dommage que ça n'ai jamais décollé, car les gens tirent la mauvaise idée du mot "automatique" (notamment concernant la taille des tableaux).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #23
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Octobre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2014
    Messages : 135
    Points : 39
    Points
    39
    Par défaut
    Donc solution 1 est juste et solution 2 est faute

  4. #24
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alias2015_29 Voir le message
    et solution 2 est faute
    Punaise mais il faut vraiment qu'on te tienne la main ??? Ca marche non ? Donc ce n'est pas "faux". C'est seulement que c'est pas "optimisé" !!!

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    /**
    **  TAF-CH2 Pointeurs et Fichiers
    **  Exercice 1: Tableau Dynamique
    **/
    #include <stdio.h>
    # define N 10
    int main()
    {   
        //déclaration des variables
        int *T;
        int i;
        int *pt;
     
        T = malloc(N * sizeof(int));
     
        if (T== NULL)
        {
            printf("Echec d'allocation dynamique de la mémoire");
            return -1;
        }
     
        for(i=0, pt=T; i<N; i++, pt++)
        {
            printf("Donner valeur de case %d :",i+1);
            scanf("%d", pt);
       }
     
        printf("\n Les elements du tableau sont : ");
        for(i=0, pt=T; i<N; i++, pt++)
            printf("%d |",*pt);
     
        free(T) ;
        return 0;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #25
    Nouveau membre du Club
    Femme Profil pro
    Enseignant
    Inscrit en
    Octobre 2014
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2014
    Messages : 135
    Points : 39
    Points
    39
    Par défaut
    si je met free(pt) ; au lieu de l'insctruction free(T) ;

    ou je met les deux free(T) ; et free(pT) ;

    vous avez écrit cette remarque PS: tu as le droit d'indenter correctement aussi tes boucles !!! j'ai pas compris c.a.d je dois faire des commentaires dans la boucle ??

  6. #26
    Invité
    Invité(e)
    Par défaut
    On ne doit désalloué de la mémoire qu'au variable à qui l'on a alloué de la mémoire.
    Alloué, c'est à dire que l'on a "bloqué" de la mémoire pour qu'elle ne soit inutilisable par personne d'autre. Si on ne fait pas de désallocation quand on ne l'utilise plus, c'est une partie de la mémoire qui reste ainsi gelé, et donc inaccessible pour d'autre variable plus tard.

    T = malloc(N * sizeof(int)); est une allocation dans les règles. On dit que à l'adresse renvoyé par le malloc, il y aurait une zone mémoire de N * sizeof(int) en taille. il faut donc désallouer cette zone en fin de programme, la dégeler, avec free(T); .

    Quand on fait un malloc, le pointeur recevant l'adresse ne peut être modifié, justement pour cette raison.

    int *pt fait que c'est un pointeur solitaire. Il se promène ça et là, et quand on le lui demande, pointera vers une zone mémoire prédéfinie. C'est grâce à pt que l'on naviguera dans la zone mémoire de T. Donc, pt pointera sur une adresse contenu dans la zone mémoire de T, mais n'en sera pas le gardien.

    Quand à ce qui concerne l'indentation...
    google : http://lmgtfy.com/?q=indenter+programme+informatique

    Pour reprendre Sve@r, on ne te tiendra pas toujours la main... A toi de te renseigné sur les choses que tu ne sais pas !

  7. #27
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par alias2015_29 Voir le message
    si je met free(pt) ; au lieu de l'insctruction free(T) ;
    Tu peux mettre free(pt - N)

    Citation Envoyé par alias2015_29 Voir le message
    ou je met les deux free(T) ; et free(pT) ;
    Ouais, et pourquoi pas free(i) tant qu'on y est ???
    Une allocation implique une seule libération (et inversement) !!!
    Il me semble cependant qu'on a le droit d'écrire plusieurs fois free(T) mais je ne suis pas certain de ce que j'avance et de toute façon je ne vois pas pourquoi on irait faire cela...

    Citation Envoyé par alias2015_29 Voir le message
    si je met free(pt) ; au lieu de l'insctruction free(T) ;
    Citation Envoyé par archMqx. Voir le message
    On ne doit désalloué de la mémoire qu'au variable à qui l'on a alloué de la mémoire.
    Alloué, c'est à dire que l'on a "bloqué" de la mémoire pour qu'elle ne soit inutilisable par personne d'autre. Si on ne fait pas de désallocation quand on ne l'utilise plus, c'est une partie de la mémoire qui reste ainsi gelé, et donc inaccessible pour d'autre variable plus tard.

    T = malloc(N * sizeof(int)); est une allocation dans les règles. On dit que à l'adresse renvoyé par le malloc, il y aurait une zone mémoire de N * sizeof(int) en taille. il faut donc désallouer cette zone en fin de programme, la dégeler, avec free(T); .
    Et surtout, ne pas perdre T entre les deux opérations c'est à dire surtout ne pas écrire T=autre_chose ou T++ ou T-- (ou bien être capable de le retrouver après comme ma première remarque qui se justifie par le fait qu'à la fin de ma boucle, T=pt - N mais bon, autant rester simple...)

    Citation Envoyé par archMqx. Voir le message
    Si on ne fait pas de désallocation quand on ne l'utilise plus, c'est une partie de la mémoire qui reste ainsi gelé, et donc inaccessible pour d'autre variable plus tard.
    Et sur certains (vieux) OS, la mémoire non libérée reste définitivement bloquée jusqu'au reboot !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. rechercher une sous chaine dans une chaine
    Par id.prog dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/01/2009, 17h59
  2. Rechercher une sous chaine dans un chaine
    Par franck06 dans le forum Access
    Réponses: 2
    Dernier message: 20/09/2006, 14h53
  3. Recherche une sous-chaine dans un champ ?
    Par nerick dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/03/2006, 13h46
  4. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  5. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39

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