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 dynamique sur tableau 2D


Sujet :

C

  1. #21
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Mais si on rectifie le calcul (ie tab[i]=(int*)((char*)tab + off), alors au résultat
    Ce n'est pas le seul « calcul » à rectifier .
    Ceci off = nLig + nCol * (i + nLig); est faux quelle que soit la méthode.
    Citation Envoyé par Winjerome
    on passe la première zone de taille nLig * sizeof(*tab). Mais ensuite il faut se déplacer par unités de sizeof(int). [...] aller sur la ie ligne revient à se déplacer de i * nCol cases
    J'ai déjà donné la méthode en passant par un int* :

    int *debut_tableau = (int*)(tab + nLig); // on passe la zone des pointeurs (unités de nLig = sizeof(*tab) = sizeof(int*)).
    tab[i] = debut_tableau + i * nCol; // on se déplace sur la i-ème ligne (unités de i * nCol = sizeof(*debut_tableau) = sizeof(int)).

    Pour ta méthode avec un (char*) il ne faut pas oublier de multiplier par les bons sizeof (sizeof(char) étant égal à 1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    size_t off =   nLig   * sizeof(*tab)   // on passe la zone des pointeurs
               + i * nCol * sizeof(**tab); // puis se déplace sur la i-ème ligne
    tab[i] = (int*)((char*)tab + off);
    Citation Envoyé par Sve@r Voir le message
    Oui mais pour moi c'est dans l'autre sens. Les pointeurs sont à la fin de la zone des ints, qui, elle, commence au début de tab. Ceci pour permettre par exemple à un itérateur qui partirait de tab de pouvoir lui-aussi accéder aux ints par simple incrément sans avoir à le faire partir d'un offset à la c..
    Et ces pointeurs continuent évidemment à pointer vers les différents "tab[x]" qui identifient chaque début de ligne.
    Ok pourquoi pas, dans ce cas, il faudra utiliser un autre int** qui pointera vers le début de la zone des pointeurs pour garder l'écriture [i][j].
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int *debut_tableau = (int*)tab;
    int **pointeurs = (int**)(debut_tableau + nCol * nLig);
    Puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeurs[i] = debut_tableau + i*nCol;
    puis pointeurs[i][j] ou debut_tableau[i * nCol + j]
    Citation Envoyé par Sve@r Voir le message
    Sinon très belle image. Tu l'as faite avec quoi ?
    Merci, avec LaTeX / TikZ.
    Dernière modification par Invité ; 12/12/2019 à 13h39.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. allocation dynamique à un tableau
    Par amateurc dans le forum Débuter
    Réponses: 4
    Dernier message: 25/06/2008, 20h24
  2. Réponses: 11
    Dernier message: 11/06/2008, 18h05
  3. Bug sur une allocation dynamique de tableau
    Par Atharendil dans le forum C++
    Réponses: 6
    Dernier message: 15/12/2007, 23h42
  4. Réponses: 9
    Dernier message: 12/06/2007, 14h15
  5. Réponses: 6
    Dernier message: 26/11/2005, 19h55

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