Salut,
Je transforme un array en tableau deux dimensions, je peux ensuite remplir le tableau avec les données de l'array de base, manipuler les données et enregistrer le résultat dans un fichier sans problème.
Toutefois lors de la libération du tableau apparaît ce problème et qui plante l'appli bien sur.
Le tableau est créé comme ceci:
Les données sont une image, on a donc width et height qui sont ses dimensions en pixels,
chaque pixel est un uint32 pour les quatre composantes RGBA et buffer qui est l'array de base.
Comme mon fichier image était correctement écrit, j'ai supposé que le problème venait de la fin du code, j'ai ajouté le printf(" %lu", row) pour vérifier ça.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 npixels = width * height; offset = npixels - width; length = 4 * width; uint32 *raster[height]; for (row = 0; row < height; row++) raster[row] = malloc(width * sizeof(uint32)); for (row = 0; row < height; row++) { memcpy(raster[row], buffer + offset, length); offset -= width; } _TIFFfree(buffer); // traitement des données du tableau ..... for (row = 0; row < height; row++) { printf(" %lu", row); free(raster[row]); }
Je l'ai aussi testé sans aucune manipulation des données, donc du remplissage du tableau directement au free() avec le même résultat.
Voici la sortie (abregée):
Dans cet exemple, il s'agit d'une image de 2868 pixels de haut, le stack smashing apparaît toujours exactement au même endroit (row 2679) et pourtant il continue jusqu'au bout (row 2867).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 0 1 2 ...... 2676 2677 2678 26*** stack smashing detected *** 79 2680 2681 2682 2683 2684 2685 ....2864 2865 2866 2867Abandon (core dumped)
J'utilise gcc-4.5.3 sur Linux 64b.
Partager