[Langage C] Erreur dans tableau ?
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

[Langage C] Erreur dans tableau ?



  1. #1
    Lechero

    [Langage C] Erreur dans tableau ?


    ------

    Bonjour à tous,

    j'ai un problème avec le programme ci-dessous :
    - un utilisateur rentre la taille d'un tableau
    - une fonction le remplit avec des nombres compris entre 0 et 100
    - une fonction l'affiche

    Pour une taille comprise entre 0 et 4, tout marche bien. A partir de 5, cela bug ! Message : "nom_programme.exe a cessé de fonctionner ..."

    Le compilateur n'affiche aucune erreur / warning (je suis sous Code::Blocks).

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    void rempli (int *tab,unsigned int taille)
    {
        int i=0;
        for (i=0;i<taille;i++)
        {
            tab[i]=rand()%100;
        }
    }
    
    int affiche (int tab[], int taille)
    {
        int j=0;
    
        for (j=0;j<taille;j++)
        {
            printf("%d  |  ", tab[j]);
        }
    }
    
    int main()
    {
    
        int tab[]={0};
        int taille;
    
        srand(time(NULL));
    
        printf("saisir taille");
        scanf("%d", &taille);
        rempli(tab,taille);
        affiche(tab,taille);
    
    
    
        return 0;
    }
    Pouvez-vous m'aider ?

    Merci d'avance !

    Lechero.

    P.S. : je vois dans la console que le tableau est rempli et s'affiche, mais le message d'erreur vient quand même, et à la fin de la console j'ai
    "process returned -10075 (suite de chiffres) "

    -----
    Dernière modification par Lechero ; 27/12/2012 à 16h04.
    A vaincre sans péril, on triomphe sans gloire (Corneille).

  2. #2
    Paraboloide_Hyperbolique

    Re : [Langage C] Erreur dans tableau ?

    Bonjour,

    Vous avez fait une erreur classique: vous avez déclaré un tableau statique contenant une entrée (un tableau de 1 case) et vous essayez d'en remplir 100...
    Il n'est alors pas étonnant d'être victime d'un débordement de la mémoire allouée à votre programme et que celui-ci ait des problèmes à l’exécution.

    La solution pour corriger votre code est la suivante: déclarer un tableau dynamique.

    Code:
    int main()
    {
    
        int *tab;
        int taille;
    
        srand(time(NULL));
    
        printf("saisir taille");
        scanf("%d", &taille);
    
        tab = new int[taille]; // Allocation de "taille" cases en mémoire.
    
        // Les fonctions suivantes restent inchangées.
        rempli(tab,taille);
        affiche(tab,taille);
    
        // Libération de la mémoire.
        delete[] tab;
    
        return 0;
    }

  3. #3
    Lechero

    Re : [Langage C] Erreur dans tableau ?

    Bonsoir,

    merci pour la réponse mais elle ne marche pas !

    J'ai beaucoup d'erreurs/warnings ... Je devrais utiliser malloc / calloc / free ... ?
    A vaincre sans péril, on triomphe sans gloire (Corneille).

  4. #4
    Paraboloide_Hyperbolique

    Re : [Langage C] Erreur dans tableau ?

    Bonsoir,

    Je viens de tester le code sur mon compilateur (g++ sous Linux). Il y a effectivement des warnings provenant de vos fonctions "affiche" et "rempli".
    Si vous utilisez un compilateur c (comme gcc) il faut alors effectivement remplacer les opérateurs new et delete respectivement par malloc et free (new et delete étant des opérateurs standards du C++, mais pas du C).

    Voici le code pour un compilateur pur c avec vos fonctions corrigées:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    void rempli (int *tab, int taille)
    {
        int i=0;
        for (i=0;i<taille;i++)
        {
            tab[i]=rand()%100;
        }
    }
    
    void affiche (int *tab, int taille)
    {
        int j=0;
    
        for (j=0;j<taille;j++)
        {
            printf("%d  |  ", tab[j]);
        }
    }
    
    int main()
    {
    
        int *tab;
        int taille;
    
        srand(time(NULL));
    
        printf("saisir taille");
        scanf("%d", &taille);
    
        tab = (int*) malloc(taille*(sizeof(int))); // Allocation de "taille" cases en mémoire.
    
        // Les fonctions suivantes restent inchangées.
        rempli(tab,taille);
        affiche(tab,taille);
    
        // Libération de la mémoire.
        free(tab);
    
        return 0;
    }

  5. A voir en vidéo sur Futura
  6. #5
    Lechero

    Re : [Langage C] Erreur dans tableau ?

    Ça marche super, merci beaucoup !
    A vaincre sans péril, on triomphe sans gloire (Corneille).

Discussions similaires

  1. Suppression d’élément dans un tableau, langage C.
    Par deyni dans le forum Programmation et langages, Algorithmique
    Réponses: 24
    Dernier message: 16/10/2012, 18h28
  2. Difference entre structure, pointeur, tableau (langage C).
    Par deyni dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 12/10/2012, 15h23
  3. conversion d'un tableau(langage C)
    Par narakphysics dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 08/04/2012, 14h06
  4. [PIC18F2550] langage C,MPLAB avec CCS - problème de tableau
    Par inviteff826af6 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/04/2010, 14h32
  5. Tableau en langage C
    Par invite1439ebd6 dans le forum Logiciel - Software - Open Source
    Réponses: 9
    Dernier message: 20/08/2007, 23h27