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 :

Un souci dans mon programme test en C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut Un souci dans mon programme test en C
    Bonjour , je suis nouveau en langage C j'essai de comprendre les pointeurs en faisant des tests mais la je ne trouve pas pourquoi mon programme ne veut pas se lancer en sachant que je suis sur ubuntu gedit le terminal .

    Code : 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
     
    void essai1(int a, int *b)
    {
    int inter;
    inter=a ;
    a=*b;
    *b=inter;
    }
    void main (void)
    {
    int i, j ;
    int *c, *d ;
    *c = malloc(sizeof(int)) ;
    i = 2 ;
    j = 8 ;
    *c = 5 ;
    essai1(i,j) ; 
    essai1(i,&j) ; 
    essai1(i,c) ; 
    essai1(i,&c) ;
    essai1(i,d) ; 
    essai1(i,&d) ; 
    }
    1. la syntaxe est elle correct?

    2. y'a t-il des erreurs de code (avec le plus de précision possible s'il vous plait )

    Sinon je remercie la communauté "developpez.net" ainsi que les dirigeants car l'ambiance est sympa et de plus cest une mines d'or information ici

  2. #2
    Membre expérimenté

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Points : 1 672
    Points
    1 672
    Par défaut
    Citation Envoyé par guwop Voir le message
    mon programme ne veut pas se lancer
    Hello,
    Peux-tu expliciter ?

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    696
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 696
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour, bienvenue sur le forum

    Qu'est-ce que tu entends par "le programme ne veut pas se lancer" ?

    Je pense que ton compilateur te dit simplement que le programme n'est pas correct, et donc ne le compile pas.

    Quelques erreurs :
    • malloc sans free = fuite mémoire
    • Le malloc retourne un pointeur, c est déjà un pointeur, donc la ligne 13 doit s'écrire c = malloc(sizeof(int));.
    • La fonction essai1 est supposée échanger deux variables, mais le paramètre a est passé par copie, donc le premier paramètre fourni à la fonction ne sera jamais modifié. Les deux paramètres devraient être des pointeurs
    • Quand tu donne à la fonction essai1 le paramètre i ou j, la fonction va chercher du contenu à l'adresse 2 ou 8, ce qui a de fortes chances de finir en "segmentation fault"
    • Pareil quand tu fournis &c et &d, tu vas fournir l'adresse de l'adresse d'une variable, des valeurs aléatoires, donc très probablement "segmentation fault"
    Je fais appel aux esprits de Ritchie, Kernighan, Stroustrup et Alexandrescu
    Donnez moi la force, donnez moi le courage de coder proprement !

    « Ça marche pas » n'est PAS une réponse convenable, merci de détailler le souci en fournissant l’environnement, le code source, les commandes et les messages d'erreur.

    Ce club possède également un clavardage, on y trouve quelques perles entre deux sessions d'entraides.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    Merci Daïmanu effectivement j'ai comme erreur " Erreur de segmentation (core dumped)"

    donc si j'ai bien compris faudrait faire :

    Code : 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
     
     
     
    void essai1(int *a, int *b) //correction ici//
    {
    int inter;
    inter=a ;
    a=*b;
    *b=inter;
    }
    void main (void)
    {
    int i, j ;
    int *c, *d ;
    c = malloc(sizeof(int)) ; //correction ici//
    i = 2 ;
    j = 8 ;
    *c = 5 ;
    essai1(i,j) ; 
    essai1(i,&j) ; 
    essai1(i,c) ; 
    essai1(i,&c) ;
    essai1(i,d) ; 
    essai1(i,&d) ; 
    }

  5. #5
    Membre expérimenté Avatar de SkyZoThreaD
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juillet 2013
    Messages
    583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 583
    Points : 1 615
    Points
    1 615
    Par défaut
    Il faudrait voir un cours sur les pointeurs ça t'aiderait beaucoup.
    quand tu écris
    Tu copies la valeur de la variable 'b' dans l’adresse 'a'. Donc le pointeur 'a' pointe n’importe où. Le comportement est alors indéterminé (big up Heisenberg).
    La liberté est à la sociologie ce que l'instant présent est à la physique relativiste.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable de trafic
    Inscrit en
    Avril 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Responsable de trafic
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2016
    Messages : 12
    Points : 1
    Points
    1
    Par défaut
    merci pour l'explication je vais revoir le cours sur les pointeurs

  7. #7
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Si tu veux un peu d'assistance, il y a une façon de lire l'étoile qui simplifie la compréhension, même si c'est un peu lourd.

    l'opérateur * peut se lire "ce qui est désigné par".
    De même l'opérateur & de prise d'adresse peut se lire "la désignation de".

    Supposons le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int * a, b;
    int entier = 2;
    int autre;
    int * pointeur =  &autre;
     
    pointeur = &entier;
    autre = * pointeur;
    La transcription serait:
    Cher compilateur,
    Soient des entiers: ce qui est désigné par la variable a, et la variable b
    Soit un entier: la variable entier initiée par 2
    Soit un entier: la variable autre
    Soit un entier: ce qui est désigné par la variable pointeur, initiée par la désignation de autre

    affecte à pointeur la désignation de autre
    affecte à autre ce qui est désignée par pointeur
    Tu remarqueras au passage que b est un entier, pas un pointeur d'entier.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

Discussions similaires

  1. Petit soucis dans mon programme/compilation
    Par alessandro67 dans le forum C
    Réponses: 10
    Dernier message: 23/02/2009, 17h19
  2. Petit souci de recherche dans mon programme
    Par jojo72000 dans le forum Débuter
    Réponses: 4
    Dernier message: 03/06/2008, 18h54
  3. Integrer une musique dans mon programme
    Par Tutux84 dans le forum C
    Réponses: 2
    Dernier message: 29/01/2005, 12h41
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

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