Tout d'abord je met comme thème directX car avec OpenGL, se sont des library de base graphiques.
Voici mon problème, je suis en train de suivre les tutoriaux de Nehe sur OpenGL et je rencontre un problème de "fragmentation fault".
En effet je charge des textures et quand je veux libérer la mémoire utilisée (free) je reçoit donc un message SIGSEGV (segmentation fault).
Et en fait je ne sais pas du tout pourquoi, enfin je me dis que cela vient de l'objet AUX_RGBImageRec et l'argument data qui doit avoir un problème de limite pour le free mais je ne comprend pas d'où cela vient d'autant plus que si je lance le code directement téléchargé du site de nehe cela fonctionne et ayant exactement le même code de mon côté non.
Pour informations, je développe sur codeBlocks et je me demande si le problème ne viendrait pas de cette plateforme de développement car ce n'est pas la première fois que je rencontre ce genre de problème un peu incompréhensible...
Voici la partie du code concernée:
AUX_RGBImageRec *LoadBMP(char *Filename) // Loads A Bitmap Image
{
FILE *File=NULL; // File Handle
if (!Filename) // Make Sure A Filename Was Given
{
return NULL; // If Not Return NULL
}
File=fopen(Filename,"r"); // Check To See If The File Exists
if (File) // Does The File Exist?
{
fclose(File); // Close The Handle
return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
}
return NULL; // If Load Failed Return NULL
}
int LoadGLTextures() // Load Bitmaps And Convert To Textures
{
int Status=FALSE; // Status Indicator
AUX_RGBImageRec *TextureImage[5]; // Create Storage Space For The Textures
memset(TextureImage,0,sizeof(void *)*5); // Set The Pointer To NULL
if ((TextureImage[0]=LoadBMP("Data/logo.bmp")) && // Logo Texture
(TextureImage[1]=LoadBMP("Data/mask1.bmp")) && // First Mask
(TextureImage[2]=LoadBMP("Data/image1.bmp")) && // First Image
(TextureImage[3]=LoadBMP("Data/mask2.bmp")) && // Second Mask
(TextureImage[4]=LoadBMP("Data/image2.bmp"))) // Second Image
{
Status=TRUE; // Set The Status To TRUE
glGenTextures(5, &texture[0]); // Create Five Textures
for (loop=0; loop<5; loop++) // Loop Through All 5 Textures
{
glBindTexture(GL_TEXTURE_2D, texture[loop]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX, TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);
}
}
//segmentation fault here
for (loop=0; loop<5; loop++) // Loop Through All 5 Textures
{
if (TextureImage[loop]) // If Texture Exists
{
if (TextureImage[loop]->data) // If Texture Image Exists
{
//ici segmentation fault//////
free(TextureImage[loop]->data); // Free The Texture Image Memory
}
free(TextureImage[loop]); // Free The Image Structure
}
}
return Status; // Return The Status
}
Merci de votre aide en avance,
Livevlad.