Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1792 connectés 

  FORUM HardWare.fr
  Programmation

  [C/C++] Pointeur sur tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Pointeur sur tableau

n°76040
246tNt
Resistance is futile
Posté le 27-11-2001 à 18:09:39  profilanswer
 

Voila, j'aimerait déclarer un pointeur sur un tableau et allouer de la place pour ce tableau via malloc
 
Alors au debut j'ai essayé
 
GLubyte *texture[64][64];
texture = ( GLubyte*[64][64] )(malloc(64*64*sizeof(GLubyte)));
 
Mais ca ca marche pas parce que au fait, texture est pas un pointeur sur tableau mais un tableau de pointeur ( apparemment )
 
alors j'ai essayé
 
GLubyte (*texure)[64][64];
... idem ...
 
Mais la marche pas non plus .... (erreur de cast)
 
Alors j'ai bien une solution qui marche mais je l'aime pas ( pas envie d'un typedef pour ca )
 
typedef GLubyte texdata[64][64];
texdata *texture;
texture = (texdata*)(malloc(sizeof(texdata)));
 
Personne ne sais comment faire sans typedef ???

mood
Publicité
Posté le 27-11-2001 à 18:09:39  profilanswer
 

n°76042
BENB
100% Lux.
Posté le 27-11-2001 à 18:11:42  profilanswer
 

GLubyte * tout simplement...
sinon regarde les slice arrays de la STL...

n°76051
LetoII
Le dormeur doit se réveiller
Posté le 27-11-2001 à 19:27:09  profilanswer
 

Bon alors si j'ai bien compris ce que tu veux faire voilà comment faut le coder:
 
GLubyte  texture[64][64]; /*Le tableau*/
Glubyte *ptexture=texture;/*Pointeur sur le tableau, ici il pointe sur le début du tableau*/

n°76057
246tNt
Resistance is futile
Posté le 27-11-2001 à 19:36:24  profilanswer
 

BENB : ah ? et je pourrait faire texture[x][y], il me chiera pas dessus ? je vais essayer desuite
 
LetoII :
Oaui mais la la memoire qui est alloué elle l'est par ton GLubyte texture[64][64]
 
moi au fait, j'ai mis malloc dans l'exemple mais elle sera alloué par wglAllocateMemoryNV qui me retourne aussi un void* mais lui il m'alloue de la memoire dans la memoire video ( ou AGP au choix )
 
Et je veut pouvoir faire

n°76090
LetoII
Le dormeur doit se réveiller
Posté le 27-11-2001 à 20:47:40  profilanswer
 

246tNt a écrit a écrit :

BENB : ah ? et je pourrait faire texture[x][y], il me chiera pas dessus ? je vais essayer desuite
 
LetoII :
Oaui mais la la memoire qui est alloué elle l'est par ton GLubyte texture[64][64]
 
moi au fait, j'ai mis malloc dans l'exemple mais elle sera alloué par wglAllocateMemoryNV qui me retourne aussi un void* mais lui il m'alloue de la memoire dans la memoire video ( ou AGP au choix )
 
Et je veut pouvoir faire  




 
Ben falait le dire tout de suite tout ce que tu as à faire c:
 
GLubyte *texture=(GLubyte *)wglAllocateMemoryNV(arguments);

n°76091
246tNt
Resistance is futile
Posté le 27-11-2001 à 20:48:18  profilanswer
 

BENB :
 
en le declarant GLubyte * texture, si je fait
 
texture[i][j] = 10; ca marche pas ...

n°76099
LetoII
Le dormeur doit se réveiller
Posté le 27-11-2001 à 20:53:28  profilanswer
 

246tNt a écrit a écrit :

BENB :
 
en le declarant GLubyte * texture, si je fait
 
texture[i][j] = 10; ca marche pas ...  




 
tante: GLubyte [64][] texture;
 
si ça marche pas tu fait les accés à la main:
texture[i*(sizeof(GLubyte)*64)+j]

n°76102
bjbebert
Posté le 27-11-2001 à 20:59:19  profilanswer
 

Quand tu fais GLubyte *texture[64][64];, il est pas deja alloue en memoire ton tableau (qui est un tableau de tableaux de pointeurs sur GLubyte) ??

n°76106
LetoII
Le dormeur doit se réveiller
Posté le 27-11-2001 à 21:03:29  profilanswer
 

bjbebert a écrit a écrit :

Quand tu fais GLubyte *texture[64][64];, il est pas deja alloue en memoire ton tableau (qui est un tableau de tableaux de pointeurs sur GLubyte) ??  




 
si mais je pense que si tu lui fait type tableau[64][] il n'alloue pas de mémoire car il ne connait pas la taille totale du tableau, mais il a besoin du 64 pour connaitre la taille des lignes

n°76107
bjbebert
Posté le 27-11-2001 à 21:04:53  profilanswer
 

Apres avoir relu la question (je vois pas tres bien ce que tu cherches a avoir), je dirais simplement :
 
GLubyte *texture;
texture = (GLubyte *)malloc(64*64 * sizeof(GLubyte));
 
Pour acceder :
texture[y * 64 + x];
 
Remplace le 64 par les constantes SIZE_X et SIZE_Y, ca fait pro :D

mood
Publicité
Posté le 27-11-2001 à 21:04:53  profilanswer
 

n°76110
bjbebert
Posté le 27-11-2001 à 21:07:01  profilanswer
 

LetoII a écrit a écrit :

 
 
si mais je pense que si tu lui fait type tableau[64][] il n'alloue pas de mémoire car il ne connait pas la taille totale du tableau, mais il a besoin du 64 pour connaitre la taille des lignes  




 
Avec tableau[64][], je serais pas etonne s'il t'allouais un tableau de 64 pointeurs non initialises.
J'ai pas de compilo sous la main, dur de tester.

n°76115
LetoII
Le dormeur doit se réveiller
Posté le 27-11-2001 à 21:15:05  profilanswer
 

bo alors c moi qui est di une bétise t'as pas le choix:
 
type *texture=(type *)malloc(sizeof(type)*64*64);
 
texture[i*64+j]=element;
ou alors tu te fait ta class qui encapsule ça

 

[edtdd]--Message édité par LetoII--[/edtdd]

n°76183
246tNt
Resistance is futile
Posté le 28-11-2001 à 00:04:21  profilanswer
 

LetoII:  
 
Ben au fait j'aimerai eviter les acces a la main ... ( parce que mon vrai tableau a 3 dimension et ca me fait un peu chier parce que j'aimerait pouvoir faire
 
(*texture)[x][y] et qu'il me retourne un tableau de 4 byte ( en gros un vecteur couleur RGBA )
 
 
bjbebert:
 
a) GLubyte   (*texture)[64][64][4];
 
   Ca n'alloue pas de memoire ( avec le debugger j'ai bien que texture == NULL )
 
b) Ben ce que je cherche a faire c avoir un pointeur sur un tableau multidimensionnel et convertir un pointeur void vers un pointeur de ce type la. Parce que avec le compilateur C++ de Visual qui est pas tres tolérant ( il a raison ... ) c marche pas
 
Quand a SIZE_X et SIZE_Y, c fait ( ca s'appele TEX_HEIGHT et TEX_WIDTH en fait ) mais je voulait pas encombrer mon exemple ...
 
 
LetoII:
 
Je vais pas faire une classe rien que pour ca, alors je prend la methode typedef ... mais c enervant, ca me chiffone cette histoire

n°76185
246tNt
Resistance is futile
Posté le 28-11-2001 à 00:11:39  profilanswer
 

C bon je viens de trouver ...
 
Declaration:
GLubyte (*texture)[TEX_HEIGHT][TEXT_WIDTH][4];
 
Allocation:
texture = (GLubyte (*)[64][64][4])( malloc( sizeof( GLubyte ) * TEX_WIDTH * TEX_HEIGHT * 4 ) );
 
Utilisation:
(*texture)[y][x][0...4] = ...  
 
.. Et ce qui foirait avant c tait pour l'allocation je mettait par l' * entre ()
et pour l'utilisation je faisait *texture[y][x][0...4] sans les () ...
 
Maintenant c nickel. Merci pour votre aide


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [C/C++] Pointeur sur tableau

 

Sujets relatifs
Problème avec tableau dynamique[c++] Tableau de char
[c] tableau d'entier en chaine de caratères ???[Java]transformation tableau 1d en tableau 2d
[HTML] disposition dans un tableau[C] Tableau de tableau
[SQL server] Passer un tableau en parametre d'une procédure stocké?Ligne par ligne dans un tableau !
[PHP] pb. tableau de référencesPk tableau en gris ??
Plus de sujets relatifs à : [C/C++] Pointeur sur tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR