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 :

Erreur simple de pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    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 : 736
    Par défaut Erreur simple de pointeurs
    Bonjour à tous.

    Je me tourne vers vous car j'ai une erreur de pointeur que je ne m'explique pas.
    J'ai un tableau d'éléments dont je voudrais passer l'adresse à une fonction pour le modifier :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    void f(int *ti[]) {
    	printf("Hello %i", *ti[0]); //par exemple
    }
     
    int main() {
    	int ti[] = {3, 14, 15};
    	f(&ti);
    	return 0;
    }

    Je pensais ce code valide, mais le compilateur me dit le contraire et à l’exécution j'ai droit à un segfault.
    La compilation avec gcc -o cast -Wall -Wextra main.c me donne comme erreur :
    main.c: In function ‘main’:
    main.c:9:2: warning: passing argument 1 of ‘f’ from incompatible pointer type [enabled by default]
    f(&ti);
    ^
    main.c:3:6: note: expected ‘int **’ but argument is of type ‘int (*)[3]’
    void f(int *ti[]) {
    ^
    Quelque-chose m’échappe, aussi je souhaiterais être éclairé de vos lumières

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    J'ai l'impression que tu as le même problème qu'ici non ? http://www.developpez.net/forums/d12...pp/c/cast-int/

    EDIT : je pense que le code que tu souhaites faire est celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
     
    void f(int (*ti)[]) {
    	printf("Hello %i", (*ti)[0]); //par exemple
    }
     
    int main() {
    	int ti[] = {3, 14, 15};
    	f(&ti);
    	return 0;
    }
    Mais je ne garantis pas grand chose ^^
    Dans ce code, le paramètre de f est du type attendu : *ti est de type int[]. Dans le printf, on déréférence le pointeur ti avec *ti pour récupérer un tableau et ensuite on récupère son premier élément.

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    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 : 736
    Par défaut
    Hum en effet ça fonctionne, c'est juste un problème de priorité d'opérateur donc.

    Je me doutait que la solution était simple, merci !

  4. #4
    Expert confirmé
    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
    Par défaut
    J'ai un tableau d'éléments dont je voudrais passer l'adresse à une fonction pour le modifier :
    A noter qu'il n'est pas nécessaire de passer l'adresse du tableau pour pouvoir modifier les éléments, l'adresse du premier élément du tableau suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
     
    void f(int ti[]) {
    	printf("Hello %i", ti[0]); //par exemple
            ti[0]= 0; 
    }
     
    int main() {
    	int ti[] = {3, 14, 15};
    	f(ti);
            printf("\nHello %i\n", ti[0]);
    	return 0;
    }

  5. #5
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    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 : 736
    Par défaut
    En effet, j'ai tellement pris l'habitude de passer des pointeurs pour modifier la valeur pointée, mais je n'ai pas réfléchi pour ce coup-là…

    M'enfin ça m'a quand appris qu'il faut faire attention à l'ordre des opérateurs et jouer avec les parenthèses.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/04/2011, 10h55
  2. Erreur simple mais incompréhensible
    Par ddestiny666 dans le forum Tkinter
    Réponses: 1
    Dernier message: 09/01/2011, 22h44
  3. [PHP 5.0] Erreur Simple Xml
    Par Shandler dans le forum Langage
    Réponses: 5
    Dernier message: 17/06/2009, 17h05
  4. Message d'erreur 'opération de pointeur incorrecte'
    Par Clotilde dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2008, 09h40
  5. une erreur avec les pointeur..
    Par lecyberax dans le forum C
    Réponses: 12
    Dernier message: 15/04/2006, 12h04

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