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 :

1 seul malloc pour 3 tableaux de dimension n*n


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Par défaut 1 seul malloc pour 3 tableaux de dimension n*n
    Salut à tous,
    Je fais un prog C de calcul de produit matriciel (C = A*B) où je dois faire une allocation de mémoire dynamique, j'ai fait le code C suivant:

    ...

    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
    #define LG 512
    double **A, **B, **C;
    int i, j, k;
     
      //allocation de mémoire pour les tableaux
     
          A = (double**)malloc(LG*sizeof(double*));
          B = (double**)malloc(LG*sizeof(double*));
          C = (double**)malloc(LG*sizeof(double*));
     
          for(i=0; i<LG; i++){
             A[i] = (double*)malloc(LG*sizeof(double));
             B[i] = (double*)malloc(LG*sizeof(double));
             C[i] = (double*)malloc(LG*sizeof(double));
          }
     
          //initialisation des tableaux A et B
          ...
     
          //calcul du produit matriciel C=A*B
          produit_matriciel(A, B, C, LG);
         ...
    Mon souci se situe au niveau du malloc. Celui que j'ai fais marche très bien, mais le problème c'est que j'ai fais 3 allocations de mémoire dynamique pr les trois tableaux, alors que j'ai la contrainte de n'en faire qu'un seul malloc pour les trois tableaux n*n.

    Est ce que qlq saurai cmt procédé pr n'effectuer qu'un seul malloc (pr l'ens des trois tableaux), et faire commencer chacun des tableaux à un offset différent?

    Merci pour votre aide

    balises [code] rajoutées par khayyam90 - merci d'y penser à l'avenir

  2. #2
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Déjà

    Ensuite, oui, il te suffit de faire un malloc trois fois plus grand, et d'aller à l'adresse renvoyée, tu auras le premier tableau, l'adresse n*n tu auras le second, et 2*n*n tu auras le dernier.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 17
    Par défaut 1 seul malloc pour 3 tableaux de dimension n*n
    Merci pour le conseil,
    ça marche

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Pas de quoi...
    [mode jmelapete]
    Evidement que ça marche, c'est juste "linéariser" un tableau en mémoire
    Et puis, c'est mon conseil 8)
    [/mode jmelapete]

    A bientôt pour de nouvelles aventures

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 17
    Par défaut
    Citation Envoyé par progman

    il te suffit de faire un malloc trois fois plus grand, et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    d'aller à l'adresse renvoyée, tu auras le premier tableau, l'adresse n*n tu auras le second, et 2*n*n tu auras le dernier
    .
    Car on a Tab1[n][n]---->n*n de cellules:en mémoire ces cellules vont
    t'être présentées de l'adresse 0.....
    jusqu'à (n*n-1)
    le second Tab2[n][n]---->encore n*n de cellules: en mémoire elles vont
    être présentées de l'adresse
    n*n.................................n*n+1....jusqu'à
    (n*n+n*n-1= 2n*n-1)

    le troisièmeTab3[n][n]---->encore n*n de cellules: en mémoire elles
    vont être présentées de l'adresse
    2n*n.....2n*n+1...........................jusqu'à
    (2n*n+n*n-1= 3n*n-1)

    et ainsi de suite

    ben bravo progman

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/03/2008, 21h45
  2. Réponses: 8
    Dernier message: 01/12/2006, 09h05
  3. Réponses: 7
    Dernier message: 01/02/2006, 15h49
  4. Tableaux à plusieurs dimensions
    Par Diabolik dans le forum Assembleur
    Réponses: 3
    Dernier message: 08/12/2003, 12h15
  5. [langage] erreurs utilisation tableaux 2 dimensions
    Par drosof dans le forum Langage
    Réponses: 11
    Dernier message: 01/07/2003, 11h44

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