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 de pointeur


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 53
    Points
    53
    Par défaut Erreur de pointeur
    Bonsoir:

    Voila je doit réaliser une fonction qui va compter le nombre de fois qu'apparait un élément passé en paramètre dans un tableau lui aussi passé en paramètre. Mais, car il y a toujours un mais, on ne connait pas à l'avance le type des élément. Cette fonction doit ressembler un peut a la fonction qsort je pense.
    Voici mon CODE :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include <stdlib.h>
    #include <stdio.h>
     
    int parcours( void * tableau , size_t nb_elt , size_t taille, void * Ref)
    {
        int cmp = 0;
        char * Elem = Ref;
        char * tab = tableau;
    	size_t i;
     
    	for(i = 0 ; i < nb_elt ; i++)
    	{
    		if(*(tab + i * taille) == * Elem)
    		{
                cmp++;
    		}
    	}
    	return cmp;
    }
     
    int main( void )
    {
        int X;
        char Elem;
    	char tabi[10] = {'a','b','c','d','a','d','a','a','e','a'};
        printf("Quel chiffre voulez-vous rechercher ?");
        scanf("%s", &Elem);
     
    	X = parcours(tabi, sizeof(tabi)/sizeof(*tabi), sizeof(*tabi), Elem);
     
        printf("il y a : %d ", X);
     
    	return EXIT_SUCCESS;
    }
    Donc dans le main si je fait un tableau d'entier tout fonctionne à merveille mais si c'est un tableau de char mon prog plante.

    Donc quelqu'un pense pouvoir m'aider il sera vraiment la bien venu.

    Merci d'avance.

    Amicalement Boobs60

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 84
    Points : 53
    Points
    53
    Par défaut
    C'est bon problème résolu.

    La ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char * Elem = Ref;
    ne sert à rien il suffit de faire le test directement avec Ref.

  3. #3
    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
    Je ne veux pas te décevoir, mais la fonction que tu présentes n'est pas correcte.
    1- pour le main() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        char Elem;
    ...
        scanf("%s", &Elem);
    ...
    	X = parcours(tabi, sizeof(tabi)/sizeof(*tabi), sizeof(*tabi), Elem);
    -- le format du scanf n'est pas correct
    -- le dernier argument de parcours n'est pas correct, ce devrait être &Elem. Le compilateur aurait dû émettre un avertissement.

    2- la fonction parcours() est fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		if(*(tab + i * taille) == * Elem)
    ne fait que comparer le premier byte d'un élément et ignore royalement les autres.
    Par exemple, sur ma machine (cela dépend du boutisme), ce code utilisant ta fonction répondra 3 !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main( void )
    {
        int X;
        int Elem = 2;
        int tabi[10] = {1,2,3,257,258,259,65538};
        X = parcours(tabi, sizeof(tabi)/sizeof(*tabi), sizeof(*tabi), &Elem);
        printf("il y a : %d ", X);
       return EXIT_SUCCESS;
    }
    Cette fonction doit ressembler un peut a la fonction qsort je pense.
    Le principe de fonctionnement de qsort(), utilisant une fonction de comparaison fournie par l'utilisateur, est différent.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

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

Discussions similaires

  1. erreurs sur pointeurs ?
    Par darkwall_37 dans le forum Débuter
    Réponses: 14
    Dernier message: 05/11/2009, 21h11
  2. Réponses: 10
    Dernier message: 03/04/2009, 13h09
  3. pb erreur de pointeur aidez moi please
    Par campgourou dans le forum Java ME
    Réponses: 20
    Dernier message: 16/03/2006, 16h36
  4. Réponses: 24
    Dernier message: 23/02/2006, 11h04
  5. erreur C2664 : pointeur sur fonction
    Par hiko-seijuro dans le forum C++
    Réponses: 2
    Dernier message: 26/07/2005, 14h50

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