CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Tableau multidimensionnel dynamique

The_Brain
The_Brain
Niveau 6
17 octobre 2005 à 18:10:37

Comment peut-on accéder aux différentes valeurs d´un tableau multidimensionnel alloué dynamiquement. Par exemple:
tableau=(float *)malloc(nblig*nbcol*sizeof(float))
Peut-on y accéder en faisant tableau[x][y] ou doit-on passer par toutes les cases avec tableau++ pour accéder à ce que l´on veut.
Merci

novembre
novembre
Niveau 18
17 octobre 2005 à 18:30:51

Lorsque tu fais çà :

tableau=(float*)malloc(nblig*nbcol*sizeof(float))

Tu n´alloues qu´un tableau à 1 dimension.

si je me rappelle bien un tableau à 2 dimensions soit être ainsi:

int i;
tableau =(float**)malloc(nblignes*sizeof(float*));
for(i=0;i<nblignes;i++){
tableau[i] = (float) malloc(nbcolsizeof(float))
}

et aprés tu peux accéder à tes élèments comme dans un tableau classique, par exemple :

tableau[x][y] = 5.2;

The_Brain
The_Brain
Niveau 6
17 octobre 2005 à 18:38:59

Ok merci !
Pour mon allocation je sais pas ce à quoi je pensais lol

The_Brain
The_Brain
Niveau 6
17 octobre 2005 à 19:18:39

Ok ça fonctionne à un petit point près.
Voici le code exact :
tableau =(float**)malloc(nblignes*sizeof(float));
for(i=0;i<nblignes;i++){
tableau[i] = (float *) malloc(nbcol*sizeof(float));
}

Encore merci pour ton aide

dnob700
dnob700
Niveau 10
17 octobre 2005 à 19:47:42

Mais ce que tu avais écrit était très bien aussi :

Certain préfère utiliser ce genre de tableau :
tableau=(float *)malloc(nblig*nbcol*sizeof(float)) ;

Car c´est "plus propre", ou en tout cas, on est assuré que tout les éléments sont ensemble dans la mémoire.

Ensuite pour acceder aux éléments tu fait :
tableau[X+Y*nbcol]
Ca marche tout aussi bien, ce n´est qu´une question de choix entre les deux méthodes.

le_duche
le_duche
Niveau 10
18 octobre 2005 à 13:57:30

à propos, je suis en train de faire une classe de matrices dynamiques et j´alloue la mémoire seulement avec new double[dimL*dimC], c´est suffisant ?
Je ne connais pas la fonction malloc... elle fait quoi en fait ?? ?

dnob700
dnob700
Niveau 10
18 octobre 2005 à 17:05:17

malloc c´est une fonction de la bibliothèque standard C dont le prototype doit ressembler à :

void* malloc(size_t s);
C´est probablement pas vraiment ça, mais c´est pas important. En gros, tu lui passe un nombre d´octet en argument et ça t´alloue le nombre d´octet demandé (si tu as de la chance) et ça te renvoie un pointeurs vers tes octets. C´est pourquoi s doit être le nombre d´objet voulue, multiplié par la taille de chaque objet.

new c´est un opérateur du C++ qui n´alloue pas des octets, mais des objets. Et disont qu´il peut "deviner" la l´espace mémoire nécessaire pour les objets en questions. En tout cas c´est le boulots du compilo de le faire. Donc, non tu n´a rien de plus à mettre que ce que tu fait déjà, il lui suffit du type des objets et de leur quantité (en réalité, c´est la même chose).

kufa
kufa
Niveau 9
18 octobre 2005 à 19:09:53

Petite precision:
malloc ne fait qu´allouer une zone memoire.
New alloue une zone memoire(sauf pour le placement new) mais aussi et surtout appel le constructeur de l´objet en question. Si l´appel a ce constructeur est implicite apres l´appel a l´operateur new, la redinition de ce dernier reviens juste a faire un malloc, d´ailleurs tous les operateurs new prennent size_t en parametre.

/kUfa

godrik
godrik
Niveau 30
19 octobre 2005 à 16:21:53

il y a eu un topic la dessus sur creation de jeu video

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment