Bonjour,

Je bloque sur ce problème depuis plusieurs jours. Je dois créer un programme de gestion bancaire en C. Pour ce faire je sauve les données des comptes dans un fichier et je créé un autre fichier qui me sert d'index. Le problème est que ce programme plante lors de l'exécution de la fonction de tri de l'index. La fenêtre d'exécution du compilateur freeze ou je reçois un message de general protection fault. Le code compile sans problème. Quelqu'un peut-il m'aider? Voici le code de la fonction:

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
void trie_index()
{
	struct compte_index temp;
	int idx,
	taille_reduite,
	debut,
	fin,
	milieu,
	pos,
	indice;
	struct compte_index *ptr_tab;
 
	ptr_tab = (struct compte_index*) malloc(nbre_vrais_enreg*sizeof(struct compte_index));
 
	ptr_flux_index = fopen(fichier_index, "r+b");
	if (ptr_flux_index == NULL)
	ptr_flux_index = fopen(fichier_index, "w+b");
 
 
	fseek(ptr_flux_index, sizeof(struct compte_index), SEEK_SET);
	for(indice=0;indice<nbre_vrais_enreg;indice++)
	fread(&ptr_tab[indice], sizeof(struct compte_index), 1, ptr_flux_index);
 
// si je place un clrscr(); ici il s'exécute 
 
	debut=0;
	fin=nbre_vrais_enreg-1;
	while (debut<=fin)
	{
		milieu = (debut + fin)/2;
		if (debut == fin)
		{
			if (ptr_tab[milieu].num_de_cpt.num > ptr_tab[nbre_vrais_enreg-1].num_de_cpt.num)
				pos = milieu-1;
			else
				pos = milieu  ;
		}
		else
		{		
			if (ptr_tab[milieu].num_de_cpt.num > ptr_tab[nbre_vrais_enreg-1].num_de_cpt.num)
				fin   = milieu - 1;
			else
				debut = milieu + 1;
		}
	}
 
// si je place un clrscr(); ici il ne s'exécute pas 
 
	temp=ptr_tab[nbre_vrais_enreg-1];
	for(idx=nbre_vrais_enreg-2;idx>=pos;idx--)
	{
		ptr_tab[idx+1]=ptr_tab[idx];
	}
	ptr_tab[pos]=temp;
	fseek(ptr_flux_index, sizeof(struct compte_index), SEEK_SET);
	for(indice=0;indice<nbre_vrais_enreg;indice++)
	fwrite(&ptr_tab[indice], sizeof(struct compte_index), 1, ptr_flux_index);
	free(ptr_tab);
	fclose(ptr_flux_index);
}
nbre_vrais_enreg est un int en variable globale qui correspond au nombre d'enregistrements dans le fichier.

Voici les structures utilisées dans cette fonction:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
struct numero
{
   int bank_id;
   long num;
   int check_digit;
};
 
struct compte_index
{
   struct numero num_de_cpt;
   int position;
};
En vous remerciant d'avance.