Je continue d'apprendre le langage C et j'ai commencé à l'utiliser pour générer des images. Je ne peux pas comprendre pourquoi un de mes programmes est segfaulting. Voici le code source, réduit à 40 lignes:L'ajout d'un membre int à une structure C provoque une erreur de segmentation
#include <stdio.h>
#include <stdlib.h>
struct color {
unsigned char r, g, b;
};
struct image {
int w, h/*, o*/;
struct color **data;
};
int main() {
// Declarations
int x, y;
struct color *black;
struct image *img;
// Set up color black
black = (struct color *) malloc(sizeof(struct color *));
black->r = 0;
black->g = 0;
black->b = 0;
// Set up image img
img = (struct image *) malloc(sizeof(struct image *));
img->w = 1;
img->h = 1;
/*img->o = 0;*/
img->data = (struct color **) malloc(img->h * sizeof(struct color *));
for (y = 0; y < img->h; y++) {
img->data[y] = (struct color *) malloc(img->w * sizeof(struct color));
}
// Fill in img with black
for (x = 0; x < img->w; x++) {
for (y = 0; y < img->h; y++) {
img->data[y][x].r = black->r;
img->data[y][x].g = black->g;
img->data[y][x].b = black->b;
}
}
// Free black
free(black);
// Free img
for (y = 0; y < img->h; y++)
free(img->data[y]);
free(img->data); // Segfaults
free(img); // Also segfaults
return 0;
}
Il compile et fonctionne très bien (en utilisant gcc sur Ubuntu et Vista avec Cygwin), mais décommentant les deux lignes traitant img- > o le casse. J'ai le sentiment que c'est lié à this previous question, mais je suis en train de lancer tout ce qui doit être mallocé (je pense). Toute aide serait appréciée.
de cette façon est également valide et plus claire, IMHO: noir = malloc (sizeof (struct noir)); – Tiago