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 :

probleme pointeur nul


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 7
    Par défaut probleme pointeur nul
    Bonjour,
    je dois écrire une fonction qui renvoit un tableau rempli de pointeurs nuls de taille égale à l'entier en paramètre.
    J'ai donc ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int* croute(int e)
    {
        int* tab=malloc(e*sizeof(int));
        for(int i=0; i<e; i++)
        {
            *tab[i]=NULL;
        }
        return tab;
    }
    mais bien évidemment le NULL ne fonctionne pas, si vous pouviez m'aider svp

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 769
    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 769
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par shadow0000 Voir le message
    mais bien évidemment le NULL ne fonctionne pas
    Quelle est donc cette évidence dont tu parles ? Où est-il écrit en C "le NULL ne fonctionne pas" ?? Que signifie d'ailleurs ce verbe "fonctionner" que tu utilises dans cette phrase et qui veut à la fois tout dire mais surtout ne rien dire du tout ???

    Quand tu as commencé les tableax, et qu'on t'apprenait la syntaxe générale d'un tableau et de l'accès à ses éléments, quelle était sa syntaxe? Si j'écris int tab[5]=[1, 7, 18, 22, 4] et que je te demande de m'afficher l'élément qui contient 18 ; ou de le changer en 17, comment tu écris ça???
    Ensuite compare avec ton code.
    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]

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 726
    Par défaut
    tu ne maîtrises pas la syntaxe pointeur

    int* tab /* =... */; permet de définir 1 pointeur. Ici 1 pointeur vers 1 entier.
    En C, les tableaux sont des pointeurs. Le nom du tableau (sans rien, sans les crochets) est 1 pointeur vers le premier élément.

    *tab ou (*tab) permet de déférencer le pointeur afin d'écrire ou de lire le valeur pointée.

    tab[A] est la syntaxe qui utilise l'arithmétique des pointeurs.
    C'est équivalent à *(tab + A) : on ajoute à tab A fois la taille (sizeof) d'1 élément.

    Donc voila que penses-tu que *tab[i]=NULL; veux dire ?
    tu déférences la ième case du tableau ... qui n'est pas initialisée (<- si je ne me trompe pas dans la précédence des opérateurs )

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 7
    Par défaut
    Oui en effet le "*" était une erreur de ma part mais sans j'ai toujours un probleme de compilation avec "assignment to ‘int’ from ‘void *’ makes integer from pointer without a cast"

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 769
    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 769
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par shadow0000 Voir le message
    mais sans j'ai toujours un probleme de compilation avec "assignment to ‘int’ from ‘void *’ makes integer from pointer without a cast"
    Oui, parce que tu as défini "tab" comme un tableau d'int et non pas comme un tableau de pointeurs. Donc de là, tout comme tu ne pourrais pas y copier de float, tu ne peux pas non plus y copier de pointeurs.
    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]

  6. #6
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    667
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 667
    Par défaut
    Citation Envoyé par shadow0000 Voir le message
    je dois écrire une fonction qui renvoit un tableau rempli de pointeurs nuls de taille égale à l'entier en paramètre.[/CODE]
    Salut,

    Cette fonction existe déjà, elle s'appelle calloc() si je ne m'abuse.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 769
    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 769
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kaitlyn Voir le message
    Cette fonction existe déjà, elle s'appelle calloc()
    Hé bien... à la fois oui et non.
    Le but de calloc est d'allouer tout en mettant tous les bits de chaque octet alloué à 0. Dans l'absolu, pour un (par exemple long), 0x00000000 vaut en général (long)0.
    Sauf que ce n'est pas garanti. Rien n'interdit à une architecture XXX de coder ses longs de telle façon que (long)0 vaille 0xFF000000. Ce n'est pas interdit. Ce serait totalement bizarroïde (limite super con...) mais pas interdit.
    Et pareil pour NULL qui vaut (void*)0 mais où on n'est pas certain que "0" signifie "tous les bits à 0".

    Ok bon c'est tellement improbable qu'on peut raisonnablement tabler sur le fait que cela n'arrivera pas et que calloc() signifie réellement "je mets tout à 0". Toutefois dans le cas présent, je soupçonne ce truc d'être un exercice de manipulation et de pointeurs, et de tableaux (et de tableaux de pointeurs) et qu'il faut donc qu'il soit résolu manuellement pour qu'il soit accepté par le prof (sans oublier le côté pédagogique du truc qui est de s'entraîner).
    Et pour finir, qu'on passe par calloc ou par malloc+memset (ben oui, si on doit utiliser des raccourcis on peut aussi parler ce celui-là) ou plus simplement par une boucle explicite, cela ne changera pas le fait que tant que le tableau ne sera pas déclaré correctement, cela ne pourra pas fonctionner.
    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]

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 7
    Par défaut
    Merci pour vos reponses

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 385
    Par défaut
    Pour écrire une fonction qui renvoie un tableau de pointeurs, la première étape est de déclarer son type comme tel:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    int** croute(int taille) //Retourne un tableau de pointeurs sur int
    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.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2022
    Messages : 7
    Par défaut
    Merci pour votre aide

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

Discussions similaires

  1. probleme pointeur en parametre de fonctions
    Par djidane39 dans le forum Langage
    Réponses: 4
    Dernier message: 18/11/2007, 15h48
  2. probleme pointeur de pointeurs
    Par dark0502 dans le forum C
    Réponses: 0
    Dernier message: 15/11/2007, 19h06
  3. Réponses: 2
    Dernier message: 16/09/2007, 20h34
  4. Probleme pointeur : allocation/desalocation
    Par SpongeBob dans le forum C++
    Réponses: 18
    Dernier message: 12/07/2007, 19h50
  5. Probleme Pointeur - API
    Par syannic dans le forum C
    Réponses: 18
    Dernier message: 10/10/2005, 10h51

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