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 :

Matrice de valeur


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut Matrice de valeur
    Bonjour,

    Je pense avoir un problème de mémoire lors de l'appel de ma fonction.
    Voici 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
    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
    47
    48
    49
    50
    51
    int algo1(int taille1, int taille2){
    char chaineS[taille1],chaineT[taille2];
    int **tabcomp , k;
    tabcomp = malloc( taille1 * sizeof(int*));
    if( tabcomp == NULL )
    {
    fprintf(stderr,"Allocation impossible");
    exit(EXIT_FAILURE);
    }
    for( k = 0 ; k < taille1 ; k++ )
    {
    tabcomp[k] = calloc (taille2, sizeof(int));
    if( tabcomp[k] == NULL )
    {
    fprintf(stderr,"Allocation impossible");
    exit(EXIT_FAILURE);
    }
    }
    generemot(chaineS, taille1);
    generemot(chaineT, taille2);
    int i,j,max=0, posL;
     
    /*Initialisation de la premiere ligne*/
    for (i=1;i<=taille1; i++){
       if (chaineT[1]==chaineS[i]){tabcomp[1][i]=1;}
    }
    /*Intialisation de la première colonne*/
    for (i=1;i<=taille2; i++){
     if (chaineS[1]== chaineT[i]){tabcomp[i][1]=1;}
    }
    for(i=2;i<=taille1;i++){
        for (j=2;j<=taille2;j++){
           if (chaineS[j]==chaineT[i]){
                tabcomp[i][j]=tabcomp[i-1][j-1] +1 ;
           }
           else {tabcomp[i][j]=0;}
    }
    }
    //recherche de la valeur maximale dans le tableau
    for(i=1;i<=taille1;i++){
        for (j=1;j<=taille2;j++){
           if (tabcomp[i][j]> max ){
               max =tabcomp[i][j];
               posL = i;
           }
       }
    }
    free(tabcomp);
    tabcomp = NULL;
    return max;
    }
    Je dois appeler cette fonction de multiples fois et la valeur de taille 1 et de taille 2 augmente de 10 en 10. Cependant l'exécution s'interrompt rapidement avant d'avoir la totalité des résultats attendus.
    J'aimerais pouvoir appeler la fonction jusqu'à obtenir une matrice de 4000 par 4000, voir même plus.

    Merci par avance.

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    Tu pourrais allouer une zone mémoire de l'a taille max un seule fois et utiliser à chaque fois un sous ensemble de cette mémoire afin d'éviter de constamment allouer/desallouer ta mémoire. En utilisant memset tu peux réinitialiser ta matrice.

    De plus des opérations d'allocation/desallocation doivent être symétrique.
    je vois une boucle pour allouer chaque ligne de ta matrice, mais pas d'opération de desallocation.

    si tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for( k = 0 ; k < taille1 ; k++ )
    {
      tabcomp[k] = calloc (taille2, sizeof(int));
    }
    tu dois aussi avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for( k = 0 ; k < taille1 ; k++ )
    {
      free(tabcomp[k]);
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 29
    Par défaut
    Merci beaucoup, le problème est résolu

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

Discussions similaires

  1. Matrices et valeurs absentes
    Par did10 dans le forum R
    Réponses: 16
    Dernier message: 06/08/2009, 16h57
  2. matrice singulière valeur propre
    Par utilisateur38 dans le forum MATLAB
    Réponses: 7
    Dernier message: 05/08/2009, 11h42
  3. [Débutant] Reduction Matrice et valeurs moyennes
    Par SamTrid dans le forum MATLAB
    Réponses: 7
    Dernier message: 04/08/2009, 09h12
  4. Réponses: 16
    Dernier message: 23/07/2009, 11h50
  5. Implementation d'une matrice +sieurs valeurs
    Par yanis97 dans le forum Langage
    Réponses: 15
    Dernier message: 19/11/2006, 12h17

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