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 mémoire pour linéarisation de matrice (Pbl)


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut Allocation mémoire pour linéarisation de matrice (Pbl)
    Bonsoir à tous,
    Je désire linéariser une matrice (par le biais d'une fonction qui prend en paramètre le tableau multidimensionnel, son nombre de ligne et de colonne) en parcourant ses valeurs et en les stockant dans un tableau 1D que j'alloue dans cette fonction (c'est aussi ce tableau que je renvoi en fin de fonction).
    Mes traitement dans les autres fonctions se déroulent bien cependant mon tableau crée dans cette fonction ne peut stocker au maximum 4 valeurs (d'ou mon problème d'allocation mais en initialisant mon tableau autrement (int tab[40] le problème reste le même.
    Dans le code fourni, seul une matrice 2D à une ligne et N colonne peut être traitée.

    Merci d'avance pour vos conseils

    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
    int * convert2D(int ** tab,int lig, int col){
     
       int *tabaux;
       int j,aux;
       if(lig == 1){
           int i=0;
           size_t n = col;
           tabaux= (int*) malloc (sizeof (int) * n);
           printf("taille %d : \n", sizeof(tabaux));
             for(j=0;j<col;j++) 
             {
                tabaux[j] =tab[i][j];            
            }
       }
        return (tabaux);  
     
    }
    Et dans mon main (ne tenez pas compte des fonctions précédentes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     lig= 1;
                                puts("Saisir la premiere matrice");
                                puts("Nombre de case ?");
                                scanf("%d",&col);                              
                                tab = allocMem( lig,col);     
                                tab = remplissageTab(tab, lig, col);
                                puts("Saisir la deuxieme matrice");
                                tab2 = allocMem( lig,col);     
                                tab2 = remplissageTab(tab2, lig, col);
          //Tout fonctionne plus haut, et convert2D renvoi 4 valeurs systematiquement                 
                                tab1D = convert2D(tab, lig, col);

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Mes traitement dans les autres fonctions se déroulent bien cependant mon tableau crée dans cette fonction ne peut stocker au maximum 4 valeurs
    Je ne comprends pas cette partie.
    Es-tu absolument sûr et certain que tes fonctions se déroulent bien ? sur quoi te bases-tu ? Pourrait-on voir ces fonctions en question ?
    Qu'entends-tu par "4 valeurs" ?
    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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    Alors voici mes 2 autres fonctions. En fait je pense que le problème est du au sizeof pour connaitre la taille du tableau

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    /*************************************************************/
    /*Fonction allocation mémoire*/
    /*************************************************************/
        int** allocMem( size_t h, size_t w )
        {
          int **m;
          m    = (int**)malloc( h*sizeof(int*) );
          m[0] = (int*)malloc( h*w*sizeof(int) );
          for(size_t i=1;i<h;i++) m[i]=m[i-1]+w;
          return m;
        }
     
     /*************************************************************/
    /*Fonction de remplissage du tableau*/
    /*************************************************************/ 
        int ** remplissageTab(int ** tab, int lig, int col)
         {
          int i,j;
          int val;
         // printf("\n");
           for(i=0;i<lig;i++) 
             for(j=0;j<col;j++) {
                printf("Elmt [%d,%d] ? ",i,j);
                scanf("%d",&val);
                tab[i][j]= val;
             }
          return tab;
         }
     
     /*************************************************************/
    /*Fonction affichage vecteur*/
    /*************************************************************/
    void afficheSimple(int *tab3){
         int i,j;
          printf("\n |");
     // printf("aaaaaaaaaaaaa :%d",sizeof(tab3));
     
          //while(i != NULL)
          for(i=0;i<sizeof(tab3);i++)
           {
            printf("%d |", tab3[i]);
            i++;
           }
     
         }

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Plusieurs erreurs que j'aperçois

    je trouve que allocMem est très confuse
    http://c.developpez.com/faq/?page=ta...urs_dimensions

    quand tu dis que tu n'as que 4 valeurs, ça signifie que tu n'affiches que 4 valeurs ?
    as-tu vérifié ce que retourne sizeof(tab3) ?
    tab3 est un int**, sizeof retournera 4
    pour connaître la dimension de ton tableau, tu n'as d'autres solution que de les enregistrer/renseigner

    et attention aux pertes de mémoire
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    Merci de ton aide, cependant allocMem fonctionne bien car je l'utilise pour d'autres fonctionnalités et aucuns problème rencontré je pense donc que c'est le sizeof qui me retourne 4 et du coup m'en affiche que 4. Je vais tenter d'envoyer la taille du tableau en paramètre.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 79
    Points : 21
    Points
    21
    Par défaut
    J'ai bien résolu le soucis, merci à vous! Et c'était bien un problème de taille du tableau, il me suffisait de passer la taille en param.

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    tres bien...........
    même si la fonction était tres facile.

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

Discussions similaires

  1. Schéma d'allocation mémoire pour une matrice
    Par Thierry Chappuis dans le forum C
    Réponses: 6
    Dernier message: 01/05/2011, 13h21
  2. Probléme de mémoire pour des grosses matrices
    Par astragoth dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 06/11/2009, 15h21
  3. Réponses: 28
    Dernier message: 27/05/2007, 15h16
  4. Allocation mémoire pour exécution de code généré
    Par mchk0123 dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 06/04/2007, 16h26
  5. Réponses: 6
    Dernier message: 24/03/2006, 18h24

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