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 :

Où se trouve l'erreur dans ce code ?


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : mars 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Où se trouve l'erreur dans ce code ?
    salut à tous et à toutes
    je suis débutant en programmation en C
    svp ou se trouve l'erreur dans ce programme
    Nom : Capture.jpg
Affichages : 136
Taille : 165,1 Ko

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 716
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 716
    Points : 30 650
    Points
    30 650
    Billets dans le blog
    4
    Par défaut
    - tu retournes un tableau local
    - indenter l'intérieur des for aide à la lisibilité

    Et hors programme
    - poster une image quand poster le code est plus rapide, simple et efficace
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : mars 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    je retourne un pointeur qui stocke l'adresse du premier élément d'un tableau.
    d'après ce que je sais:
    le passage par adresse ça passe en C
    après vérification
    la valeur de v est la même que celle de t et p.

  4. #4
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    2 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 2 175
    Points : 4 295
    Points
    4 295
    Billets dans le blog
    4
    Par défaut
    Bonsoir.

    A moins de dire une bêtise p[] n’existe que dans la fonction multipli ();.
    Retourner son pointeur renvoie en réalité une adresse non allouée. Le contenu de cette portion mémoire est donc aléatoire.

    Transmets plutôt ton tableau alloué dans le main (); à la fonction sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int p[11];
     
    multipli (p, x);
    ...
    Toute modification de p dans multipli () sera bien entendu conservée au retour de la fonction.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    9 078
    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 : 9 078
    Points : 24 805
    Points
    24 805
    Billets dans le blog
    1
    Par défaut
    Bonjour
    L'erreur: on ne retourne jamais un tableau local car on ne fait que retourner une adresse, adresse d'un truc qui n'existe plus quand on quitte la fonction. Tu veux retourner un pointeur, soit tu retournes un pointeur que tu as préalablement reçu en paramètre (dans ce cas il n'est pas local), soit il est local mais alors tu lui alloues un espace (malloc/calloc) avant de le retourner mais l'allocation mémoire c'est peut-être une notion pas encore connue.

    Quelques détails: traiter *(p+i) ne sera pas plus rapide que de traiter p[i]. C'est vrai qu'on dit qu'utiliser un pointeur est plus rapide qu'utiliser un indice, mais il faut savoir lire cette affirmation. C'est plus rapide uniquement à condition d'avoir le pointeur déjà positionné sur la bonne case du tableau ; et de préférence si la case est utilisée plus d'une fois (pour rentabiliser l'incrément, qui lui reste quoi qu'il arrive nécessaire). Autrement dit, écrire for (i=0; i < 11; i++) printf("%d + %d=%d\n", t[i], t[i], t[i] + t[i]) pourra là s'écrire for (i=0, p=t; i < 11; i++, p++) printf("%d + %d=%d\n", *p, *p, *p + *p). Mais sinon *(p+i) ou p[i] c'est exactement pareil.

    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
    #include <stdio.h>
     
    void multiplie(int *t, int n, size_t sz) {
    	size_t i;
    	int *p;
    	for (i=0, p=t; i < sz; i++, p++) *p=i*n;
    }
     
    int main() {
    	int t[11];
    	multiplie(t, 7, 11);
     
    	size_t i;
    	int *p;
    	for (i=0, p=t; i < 11; i++, p++) printf("%d\n", *p);
    }
    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

  6. #6
    Futur Membre du Club
    Homme Profil pro
    amateur
    Inscrit en
    mars 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : mars 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup
    vous m'avez vraiment éclairé

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

Discussions similaires

  1. [AC-2010] Erreur dans le code VBA : formulaire non trouvé
    Par Adel31 dans le forum VBA Access
    Réponses: 34
    Dernier message: 06/05/2016, 10h11
  2. Je ne trouve pas l'erreur dans mon code
    Par true-life dans le forum Débuter
    Réponses: 4
    Dernier message: 25/04/2009, 10h40
  3. Réponses: 6
    Dernier message: 08/06/2007, 11h38
  4. Réponses: 4
    Dernier message: 10/08/2006, 13h44
  5. [VBA] Erreur dans un code. Hierarchie DAO.
    Par snoopy69 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/10/2005, 22h28

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