Bonjour,

Je suis en train de commencer avec Gtk et j'essaye de passer des données à travers g_signal_connect. Une fois exécuté le programme il y a une fenêtre qui apparait et dit APPCRASH quand la fonction G_CALLBACK(accounts) est exécutée. C'est sûrement le code qui est mauvais mais je sais pas comment corriger l'erreur...

Merci par avance.
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
#include <gdk/gdkkeysyms.h>


struct sheet
{
    unsigned long identifier;
    char name[20];
    char surname[20];
    unsigned long credit;
    unsigned short pass;
};

void steps(GtkWidget *pWindow,struct sheet * pers);
void begin(GtkWidget *pWindow,struct sheet * pers);
void accounts(GtkWidget * window, GdkEventKey* pKey, gpointer userdata,struct sheet * pers);

int main(int argc, char **argv)
{
    struct sheet * pers;

    GtkWidget *pWindow;

    gtk_init(&argc,&argv);

    steps(pWindow,pers);
    gtk_main();
    g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit),NULL);
    return EXIT_SUCCESS;

}

void steps(GtkWidget* pWindow, struct sheet * pers)
{
    begin(pWindow,pers);

}

void begin(GtkWidget *pWindow,struct sheet * pers)
{
    pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(pWindow,"The free ATM");
    gtk_window_set_default_size(GTK_WINDOW(pWindow),600,600);
    gtk_window_set_position(GTK_WINDOW(pWindow),GTK_WIN_POS_MOUSE);

    g_signal_connect(pWindow, "key-press-event",G_CALLBACK(accounts),(gpointer) pers);

    gtk_widget_show_all(pWindow);

}

void accounts(GtkWidget * window, GdkEventKey* pKey, gpointer userdata,struct sheet * pers)
{
    /**
     *    F1->F12
     * 65470->65481
     */

    unsigned short i=65470;
    unsigned short z=1,place;
    char chain[50];

    FILE * file;
    file = fopen("accounts.txt","r");

    for(i;i<65481;i++)
    {
        fscanf(file,"%[^\n]",chain);
        fgetc(file);

        if(i == pKey->keyval)
        {
             break;
        }

    }

    fclose(file);

    printf("%s\n",chain);

    /**Initialize parameters*/
    pers->identifier=0;
    pers->credit=0;
    pers->pass=0;

    /**Fill sheet*/
    for(z;chain[z]!=';';z++)
    {
        pers->identifier=pers->identifier*10+chain[z]-'0';
    }

    z++;
    place=z;

    for(z;chain[z]!=';';z++)
    {
        pers->name[z-place]=chain[z];
    }

    pers->name[z-place]=0;

    z++;
    place=z;

    for(z;chain[z]!=';';z++)
    {
        pers->surname[z-place]=chain[z];
    }

    pers->surname[z-place]=0;

    z++;
    place=z;

    for(z;chain[z]!=';';z++)
    {
        pers->credit=pers->credit*10+chain[z]-'0';
    }

    z++;
    place=z;

    for(z;chain[z]!=';';z++)
    {
        pers->pass=pers->pass*10+chain[z]-'0';
    }

    printf("%lu\n",pers->identifier);
    printf("%s\n",pers->name);
    printf("%s\n",pers->surname);
    printf("%lu\n",pers->credit);
    printf("%hu\n",pers->pass);

}