[Délestage]Erreur lors du tri d'un tableau(malloc)
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:
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:
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.