Allocation memoire

Bonjour , j'ai un soucis avec mon code C
j'ai une matrice de 4000 ligne et 14000 colonnes dont laquel je veux comparer chaque colonne avec l'autre mais j'arrive pas de la charger en mémoire
y a t-il des astuces pour se faire ?
Merciii d'avance

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,

    Peux-tu montrer ton code ? :-).

    Note : merci d'utiliser la balise "code c".
    Exemple : <code c>ici tu mets ton code</code>
    Cdlt,
    1. 
      #include <stdlib.h> 
      #include <string.h> 
      #include <stdint.h> 
      #include <stdio.h>     
      // les focnction et les procedure
      //la fonction combainaison
      // la fonction factoriel  
       
      
      
      
      /////////////////////// main /////////////////////////////////
      
      int main(int argc, char *argv[])
      {
        int n=4026 ; int nbc=14700;
        int m1[n][nbc]; int repeter[nbc];
        int i=0; int j=0; 
       FILE *filee;
        filee=fopen("base.txt", "r");// pour charger la matrice de données 
      
       for(i = 0; i < n; i++)
        {
            for(j = 0; j <nbc; j++) 
            {
        //Use lf format specifier, %c is for character
             if (!fscanf(filee, "%d",&m1[i][j])) 
                 break;
            // mat[i][j] -= '0'; 
             //printf("%6d",m1[i][j]); //Use lf format specifier, \n is for new line
            // m1[ii][jj]=mat1[ii][jj];
      }//printf("\n");
      
        }
        fclose(filee);
      //////////////////////////////////////////////////////
      int occurence[3]={0}; 
      
        for(j=0;j<nbc;j++)
      {
        for(i=0;i<n;i++)
          {
            
          if (m1[i][j]==0)
             occurence[0]=occurence[0]+1;// nombre d'occurence de zero
           else 
             if  (m1[i][j]==1)
                 occurence[1]=occurence[1]+1;// nombre d'occurence de 1
             else 
                occurence[2]=occurence[2]+1;// nombre d'occurence de -1
      
      
          } 
      
       //printf("%6d",occurence[0]);printf("%6d",occurence[1]);printf("%6d",occurence[2]);printf("\n");
      
      //////////// trouver l'occurence maximal
      int max=occurence[0]; int valmax=0;int k=0;
      //printf("%6d",max);printf("\n");
      
        if (occurence[1]>max) {max=occurence[1]; valmax=1;}
        if (occurence[2]>max) {max=occurence[2]; valmax=2;}
       ////////////////////////////// min 
      int min=occurence[0]; int valmin=0;
      //printf("%6d",max);printf("\n");
      
        if (occurence[1]<min) {min=occurence[1]; valmin=1;}
        if (occurence[2]<min) {min=occurence[2]; valmin=2;}
      
      /////////////////////////////////////trouver la moyenne 
      int val=0;
      if(valmin==0){
                    if(valmax==1) val=2;
                     else val=1;
                   }
      
      if(valmin==1){
                    if(valmax==0) val=2;
                     else val=0;
                   }
       
      if(valmin==2){
                    if(valmax==1) val=0;
                     else val=1;
                   }
      // val pour la moyenne
      if(val==0) repeter[j]=0;
      if(val==1) repeter[j]=1;
      if(val==2) repeter[j]=-1;
      //printf("\n");
      //printf("%6d",max);printf("\n");
      //printf("%6d",val);printf("\n");
      
      occurence[0]=0;occurence[1]=0;occurence[2]=0;
      }// fin du parcour de la collonne 
      int kk=0;
      printf("\n");
      printf("\n");
      for(kk=0;kk<nbc;kk++)printf("%6d",repeter[kk]);printf("\n");
      
      
      
      }// fin main
      
      
      1. Contributeur
        Bonjour,

        int m1[n][nbc]; int repeter[nbc];
        Ce n'est pas bon.. n et nbc sont des int, tu dois mettre des nombres dans les tableaux. Donc soit en dur, soit avec #define.

        Tu as un oublié un return 0;

        Sinon, pour le problème, je te conseille de passer par malloc()... Et si ça ne fonctionne pas, tu peux peut-être passer par des tableaux de pointeurs...
      2. Merci fiddy pour la réponse je vais essayer