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 :

Problème d'allocation d'un tableau dynamique


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2021
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2021
    Messages : 1
    Points : 2
    Points
    2
    Par défaut Problème d'allocation d'un tableau dynamique
    Bonjour à ceux qui verront ce message,

    je suis étudiant en licence 2 de mathématique-informatique et j'ai un exercice assez simple qui me bloque.
    J'étais convaicue que ce que j'avais écrit étais correct mais lorsque je m'évalue il me met 0/100.
    La consigne de l'exercice est la suivante :

    "Définir la fonction createArray prenant en paramètre un entier capacity. La fonction allouera dynamiquement une variable de type dynIntArray ne contenant aucun élément mais pouvant stocker sans réallocation jusqu’à capacity entiers (autrement dit, le tableau tab devra contenir capacity cases). La fonction renverra l'adresse de la zone mémoire nouvellement allouée."

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef _DYNINTARRAY
    #define _DYNINTARRAY
     
    typedef struct{
        int * tab;
        unsigned int capacity;
        unsigned int size;
    } dynIntArray;
    ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    dynIntArray* createArray(unsigned int capacity){
     
        if (capacity == 0){
          return NULL;
        }
        dynIntArray* dyn = malloc(sizeof(dynIntArray));
        if (dyn == NULL){
            fprintf(stderr,"Not enough memory");
            exit(EXIT_FAILURE);
        }
        dyn->tab = malloc(capacity * sizeof(int));
        return dyn ;
    }
    Je vous remercie d'avance de l'aide de ceux qui verront cette discussion

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Le seul truc que je vois c'est que ta fonction fait 1 travail incomplet - indice : dynIntArray est 1 structure.

    Tu as le type size_t pour 1 unsigned long/ int : size_t, documentation cplusplus.com en anglais

  3. #3
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 291
    Points : 4 941
    Points
    4 941
    Billets dans le blog
    5
    Par défaut
    Bonjour.

    Tu alloues une zone mémoire pour *Tab. Mais tu n'initialises pas capacity et size de la structure ! Cela te semble-t-il normal ?

  4. #4
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Le problème le plus important t'a été doublement signalé.

    J'ajouterais que les lignes 4 à 6 sont de trop. Tu considères qu'un tableau ne devrait pas avoir une capacité initiale nulle en refusant de créer le tableau. Pourtant ça n'est pas un problème et c'est même fréquent de débuter avec cette condition. C'est la fonction resizeArray() qui devra adapter cette capacité en fonction de la taille demandée.

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Bonjour

    En plus du tout ce qui a été dit, il reste les soucis suivants
    • tu ne vérifies pas la réussite de l'allocation à dyn->tab (or si le premier malloc peut échouer, le second peut échouer tout aussi bien)
    • si le malloc échoue tu quittes le programme. Si je me mets du point de vue appelant, j'aimerais bien que si la fonction que tu m'offres ne peut pas faire son job elle ne me plante pas mon code pour autant
      De fait, on ne quitte jamais le programme si la fonction échoue mais on lui fait retourner une valeur particulière pour que l'appelant puisse en avoir connassance et prendre une décision.
    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]

Discussions similaires

  1. Problème de sélection dans un tableau dynamique (gestion des erreurs)
    Par aulilou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/08/2007, 16h38
  2. Réponses: 10
    Dernier message: 24/05/2007, 09h27
  3. Echec d'allocation d'un tableau dynamique
    Par le y@m's dans le forum WinDev
    Réponses: 1
    Dernier message: 09/05/2007, 16h24
  4. Réponses: 5
    Dernier message: 06/02/2007, 09h26
  5. Problème avec PtInRegion et un tableau dynamique
    Par mduse dans le forum Langage
    Réponses: 2
    Dernier message: 06/12/2005, 09h29

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