Итак, у меня есть эта функция, которая показывает список контактов, разделенных страницами.Дело в том, что при запуске функции иногда происходит случайный сбой.Итак, я открыл отладчик и строку c = fopen ("Contacts.dat", "rb");говорит SIGSEGV (я знаю, что это ошибка указателей или что-то подобное, так что я думаю, что это как-то связано с FILE * c, но я не могу понять, в чем проблема ... так вот код. (Имена переменных на испанском языкетак что я немного изменил это для вас, ребята, чтобы лучше понять).
void listarContactos(){
struct tContact contact;
FILE*c;
c=fopen("Contact.dat","rb");
if(c==NULL){
pNULL(4);
fclose(c);
exit(1);
}
int pageLimit=3;
int qContacts=0;
while(fread(&contact,sizeof(tContact),1,c)){
if(contact.Active){
qContacts++;
}
}
int aux=0;
if(qContacts%pageLimit!=0){
aux=1;
}
int vecPag[qContacts/pageLimit+aux];
int qPages=qContacts/pageLimit+aux;
fseek(c,0,0);
vecPag[0]=ftell(c);
qContacts=0;
int nPag=0;
while(fread(&contact,sizeof(tContact),1,c)){
if(contact.Active){
qContacts++;
}
if(qContacts%pageLimit==0){
nPag++;
vecPag[nPag]=ftell(c);
}
}
nPag=0;
fseek(c,vecPag[nPag],0);
char choice[4];
bool exit=0;
while(!exit){
system("cls");
cout<<"CONTACT LIST")<<endl;
qContacts=0;
fseek(c,vecPag[nPag],0);
while(qContacts<pageLimit){
if(fread(&contact,sizeof(tContact),1,c)){
if(contact.Active){
showContacto(contact);
qContacts++;
}
}
}
cout<<"Page number: "<<nPag+1<<endl;
cout<<"4 = PREVIOUS PAGE"<<endl;
cout<<"6 = NEXT PAGE"<<endl;
cout<<"0 = EXIT"<<endl;
cout<<"Option: ";
sys::getline(choice,3);
switch(choice[0]){
case '4':{
if(nPag>0){
nPag--;
}
break;}
case '6':{
if(nPag<qPages){
nPag++;
}
break;}
case '0':{ //salir
exit=1;
break;}
default:{
cout<<"wrong option!"<<endl;
break;}
}
}
fclose(c);
return;
}