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 :

Créer une fonction qui crée des pointeurs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2022
    Messages : 1
    Par défaut Créer une fonction qui crée des pointeurs
    Bonjour,
    Je souhaite creer une fonction qui va me creer automatiquement un pointeur avec la bonne taille a son appel seulement je ne vois pas comment contourner le fait que je vais moi meme encore devoir creer des pointeurs dans l'execution de mon programme. En voici un bout de code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     int* crtmalloc(int n, int m){
    	int *tab;
    	int i;
    	tab=(int *) malloc(n*sizeof(int));
    	return tab;
    }
    Merci de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 757
    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 757
    Par défaut
    Bof :
    • à quoi sert tes paramètres ? tu n'utilises pas m. Est-ce pour faire 1 matrice de taille nxm ?
    • Tu n'as pas besoin de caster le retour de malloc en C
    • ta variable i ne sert à rien. Tu as trop de code pour ce que ta fonction fait mais pas assez de code (il manque les tests préconditions) (*)


    (*) Le problème c'est la taille zéro et du malloc(0) :
    [norme] If the size of the space requested is zero, the behavior is implementation-defined: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object.
    malloc, documentation cplusplus.com en anglais
    If size is zero, the return value depends on the particular library implementation (it may or may not be a null pointer), but the returned pointer shall not be dereferenced.
    + 1 code comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int* crtmalloc(size_t n, size_t m){
        return (((n > 0) && (m > 0))? malloc(n*m*sizeof(int)): NULL);
    }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Tu n'as rien à créer, la fonction qui crée des pointeurs c'est malloc et elle prend déjà une taille en paramètre.
    Donc soit tu veux faire n'importe quoi, soit tu t'exprimes très mal. Potentiellement les 2.
    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.

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Par défaut
    Bonjour,
    après je vais peut-être pinailler mais on ne crée pas «un pointeur de la bonne taille» avec malloc. malloc est une fonction standard pour allouer de la mémoire (au moins la longueur demandée) et renvoyer un pointeur sur le début de la mémoire allouée ; un pointeur aura toujours la même taille (en gros sur les plateformes usuelles).

    Donc oui, en général en C on commence par déclarer ses structures de données et pour chacune d'elles les primitives de base comme celle qui va allouer de la mémoire sur le tas pour une instance de ce type (en très gros ce qu'on peut appeler un constructeur). Ce constructeur va utiliser des fonctions comme malloc pour allouer de la mémoire sur le tas pour ton instance. Mais ensuite, tu n'auras plus à utiliser malloc ailleurs (ou alors très sporadiquement).

    On pourrait imaginer par exemple une structure de donnée :
    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
    struct point {
        double x;
        double y;
    };
     
    struct point *point_new(double x, double y);
     
    ....
     
    struct point *point_new(double x, double y) {
        struct point *new;
        if ( (new=malloc(sizeof *new)) ) {
            *new = (struct point) {
                .x=x,
                .y=y,
            };
        }
        return new;
    }
     
    ...
    Dans ton API tu déclares une fonction qui va créer un point, cette fonction va utiliser malloc. Ensuite dans le code que tu écris tu n'utiliseras plus jamais malloc pour créer une instance de type struct point, plus jamais. Tu n'utiliseras que et uniquement point_new.

    Mais comme le fait justement remarquer Bousk, tu t'exprimes mal et il se pourrait bien que nous soyons face à un problème xy.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    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 816
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par agogs Voir le message
    Je souhaite creer une fonction qui va me creer automatiquement un pointeur avec la bonne taille a son appel
    Pourquoi faire??? T'as déjà malloc() qui fait ça. En dehors de cette histoire de "taille de pointeur" mentionné par WhiteCrow (un pointeur c'est une variable prévue pour stocker une adresse donc qui a en tout et pour tout la taille d'une adresse) qu'est-ce que ta fonction apporte comme plus-value???

    Citation Envoyé par foetus Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int* crtmalloc(size_t n, size_t m){
        return (((n > 0) && (m > 0))? malloc(n*m*sizeof(int)): NULL);
    }
    Pas mal
    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]

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

Discussions similaires

  1. [XL-2013] Créer une fonction qui permet de compter des données complexe.
    Par RabiK33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2016, 11h58
  2. Comment créer une fonction qui retourne un tableau?
    Par Dereck07 dans le forum Delphi
    Réponses: 4
    Dernier message: 26/04/2007, 13h16
  3. [VBA][03] Erreur dans une fonction qui vide des tables
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 3
    Dernier message: 20/04/2007, 14h13
  4. [MySQL] Créer une fonction qui récupère un enregistrement
    Par azahord dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 10/11/2006, 20h13
  5. DLL:exporter une fonction qui retourne un pointeur
    Par ephemeride dans le forum C++
    Réponses: 2
    Dernier message: 29/09/2006, 11h42

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