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

 


Dernière réponse
Sujet : [C/C++] Pointeur sur tableau
246tNt 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

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
246tNt 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
246tNt 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
LetoII 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]

bjbebert

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.

bjbebert 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
LetoII

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

bjbebert 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) ??
LetoII

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]

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

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);

246tNt 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
LetoII 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*/
BENB GLubyte * tout simplement...
sinon regarde les slice arrays de la STL...
246tNt 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 ???

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)