[C] Pointeurs de GLubyte * et pointeurs de unsigned int **
Bonjour a tous
Je manipule des pointeurs de type unsigned int ** et GLubyte *
Code:
1 2 3 4 5
|
unsigned int * * firstTet;
firstTet=malloc(nbPass*sizeof(*firstTet));
for(unsigned int i=0;i<nbPass;i++)
firstTet[i]=malloc(nbPass*sizeof(*(firstTet[i]))); |
Code:
1 2 3 4 5 6 7 8
|
GLubyte * data;
for(j=0;j<(*nbPass)&&again;j++)
{
data = (GLubyte *)firstTet[j];
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
glReadPixels(0, 0, W, H,GL_RGBA,GL_UNSIGNED_BYTE,data);
} |
Code:
1 2 3 4
|
for(unsigned int i=0;i<nbPass;i++)
free((firstTet)[0]);
free(firstTet); |
or il se trouve que le GLubyte fait exactement un octet tandis que l'unsigned int en fait 4. Et j'écrit systématiquement quatre composante d'un octet.
Je peut accéder aux élément a travers firstTet ou data sans le moindre problème ( et le données sont bien évidemment valide.
Cependant le code ci dessus me fait une :
*** glibc detected *** ./vr: free(): invalid next size (fast): 0x0000000001bc8620 ***
si je commente le glReadPixels, plus de problèmes, mais évidemment je n'ai plus aucune données.
si je commente les free, plus d'erreur, mais bien évidement une grosse fuite de mémoire.
je ne saisis pas le problèmes, j'ai hésité a poster en openGL mais je crois qu'il s'agit plus d'un problème concernant les pointeurs.
De la même manière, peut-on caster un pointeur de unsigned int en un pointeur de char en faisant attention a ce que l'on fait....?