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 :

allocation dynamique à un tableau


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut allocation dynamique à un tableau
    Bonjour j'essai de faire un programme qui me semble assez simple à réaliser mais que ne fonctionne pas voici le 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
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    main()
    {
    	srand((unsigned)time(NULL));
    	int i, nblancer, *tab;
     
    	printf("Saisir le nombre de lancer : ");
    	scanf("%d",&nblancer);
    	for (i=0;i<=nblancer-1;i++)
    	{
            tab = (int *)calloc (2,sizeof(int *));
            tab[i]=rand()%10 +1;
    	}
    	for (i=0;i<=nblancer-1;i++)
    		printf("valeur du lancer %2d : %d\n", i+1, tab[i]);
    }
    j'arrive a faire les premiers lancer mais pas les autres au dessus de 4 sa plante est ce que vous pouvez m'indiquer mon erreur

  2. #2
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,

    • main retourne un int
    • Pourquoi est-il déconseillé d'utiliser scanf ?
    • On libère toujours la mémoire allouer après usage via un free
    • Ton allocation devrait se faire à l'extérieur de la boucle ( avant ) car à chaque itération tu as des fuites mémoires...sinon d'après ton affichage il faut mettre nblancer et non pas 2 ...non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tab = calloc (nblancer,sizeof(int) );
    /* Ou alors mieux...*/
    tab = calloc (nblancer,sizeof *tab );
    Bon courage !
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    D'accord je vois ou ce trouvait le problème en fait je voulais qu'a chaque nouveau tour de la boucle je rajoute un emplacement mémoire est ce que cela est possible ?

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    C'est parfaitement possible, mais d'une complexité inutile pour ce petit programme.

    Tu peux par exemple faire un realloc à chaque boucle, mais ce n'est pas conseillé car c'est couteux en ressources. En général, on fait des realloc de temps en temps (genre toutes les 100 cases) selon le compromis choisi bouffage de ressources/bouffage de mémoire.


    Tu peux aussi faire une liste linéaire chainée. Il te suffit pour cela de faire une structure avec un champ int et un champ pointeur vers ce type de structure. Ensuite à chaque itération tu alloue une nouvelle strucuture, tu mets son pointeur à NULL, et tu dis au pointeur de la structure de la boucle d'avant de pointer sur la structure que tu viens de créer.
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    D'accord merci de vos réponses

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

Discussions similaires

  1. Allocation dynamique d´un tableau
    Par steph496 dans le forum C
    Réponses: 35
    Dernier message: 29/04/2009, 17h53
  2. Réponses: 11
    Dernier message: 11/06/2008, 18h05
  3. Bug sur une allocation dynamique de tableau
    Par Atharendil dans le forum C++
    Réponses: 6
    Dernier message: 15/12/2007, 23h42
  4. Réponses: 9
    Dernier message: 12/06/2007, 14h15
  5. Réponses: 6
    Dernier message: 26/11/2005, 19h55

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