Bonsoir,

Ca fait quelques jours que je tente de résoudre un problème sur mon programme. J'ai un segmentation fault au niveau du gtk_image_set_from_file(j'ai vérifié la ligne avec Valgrind) de la fonction Onclick lorsqu'elle est appelée par un clic de souris.

Je pense que c'est un problème d'allocation mémoire mais rien n'y fait. Voici le programme en question :

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
 
 
void Onclick(GtkWidget* Event, gpointer Data);
 
 
int main(int argc, char *argv[])
{
	GtkWidget* ptrMainWindow;
	GtkWidget* table;
	GtkWidget* image_case;
	GtkWidget* EventBox;
	gint height, width;
	gdouble ratio;  
 
	gtk_init(&argc, &argv);
 
	ptrMainWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
	GdkScreen* ecran = gtk_window_get_screen(GTK_WINDOW(ptrMainWindow));
	ratio = 1/2;
	height = gdk_screen_get_height(ecran);
	width = gdk_screen_get_width(ecran);
 
	gtk_window_set_title(GTK_WINDOW(ptrMainWindow), "Echec au 8 !");
	gtk_window_set_position(GTK_WINDOW(ptrMainWindow), GTK_WIN_POS_CENTER);
	gtk_window_set_default_size(GTK_WINDOW(ptrMainWindow), width/2, height-150);
 
	table = gtk_table_new(1, 1, TRUE);
	gtk_table_set_row_spacings(GTK_TABLE(table), 0);
  	gtk_table_set_col_spacings(GTK_TABLE(table), 0);
 
 
   	image_case = gtk_image_new_from_file ("./images/caseB_pion4.png");
 
    	EventBox = gtk_event_box_new ();
 
   	gtk_container_add (GTK_CONTAINER (EventBox), image_case);
    	g_signal_connect (G_OBJECT (EventBox), "button-press-event", G_CALLBACK (Onclick), &image_case);
 
   	gtk_table_attach_defaults(GTK_TABLE(table), EventBox, 0, 1, 0, 1);
 
 
 
	gtk_container_add(GTK_CONTAINER(ptrMainWindow), table);
 
	gtk_widget_show_all(ptrMainWindow);
 
	g_signal_connect(G_OBJECT(ptrMainWindow), "destroy", G_CALLBACK(gtk_exit), NULL);
 
	gtk_main();
 
	return EXIT_SUCCESS;
}
 
 
void Onclick(GtkWidget* Event, gpointer Data)
{
 
	GtkWidget* image;
	image = (GtkWidget*)Data;
 
	gtk_image_set_from_file(GTK_IMAGE(image), "./images/caseN.png");
 
}
Merci par avance.