Pointeur sur tableau [C/C++] - Programmation
Marsh Posté le 27-11-2001 à 18:11:42
GLubyte * tout simplement...
sinon regarde les slice arrays de la STL...
Marsh Posté le 27-11-2001 à 19:27:09
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*/
Marsh Posté le 27-11-2001 à 19:36:24
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
Marsh Posté le 27-11-2001 à 20:47:40
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);
Marsh Posté le 27-11-2001 à 20:48:18
BENB :
en le declarant GLubyte * texture, si je fait
texture[i][j] = 10; ca marche pas ...
Marsh Posté le 27-11-2001 à 20:53:28
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]
Marsh Posté le 27-11-2001 à 20:59:19
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) ??
Marsh Posté le 27-11-2001 à 21:03:29
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
Marsh Posté le 27-11-2001 à 21:04:53
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
Marsh Posté le 27-11-2001 à 21:07:01
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.
Marsh Posté le 27-11-2001 à 21:15:05
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]
Marsh Posté le 28-11-2001 à 00:04:21
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
Marsh Posté le 28-11-2001 à 00:11:39
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
Marsh Posté le 27-11-2001 à 18:09:39
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 ???