Salve a tutti...
è da una settimana che cerco di risolvere questo problema ma non so proprio da cosa possa dipendere; sto cercando di scrivere un programma che gestisca una elenco telefonico.
Ho scritto una funzione "aggiungiRecord" che dopo essere stata eseguita mi lancia l'errore seguente:
codice:
Run-Time Check Failure #2-Stack around the variable 'record' was corrupted
il codice è :
codice:
int aggiungiRecord(int sock){
Record record;
char permessi[RISPOSTA];
char risposta[RISPOSTA];
/* Invio al server il tipo di servizio desiderato */
while(send(sock, "AGGIUNGI", RISPOSTA,0) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush(stdout);
return -1; }
else{
printf("Lettura fallita\n");fflush(stdout);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush(stdout); }
/* Resetto il valore della stringa permessi */
memset(permessi, 0, strlen(permessi));
/* Ricevo il tipo di permesso dal server */
while(recv(sock, permessi, RISPOSTA,0) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush(stdout);
return -1;
}
else{
printf("Lettura fallita\n");fflush(stdout);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush(stdout);
}
/* Ho i permessi sufficienti per questa operazione */
if(strcmp("NO", permessi) != 0){
/* Resetto i valori della struct recordTemp */
memset(record.nome, 0, sizeof(record.nome)); memset(record.cognome, 0, sizeof(record.cognome)); memset(record.numeroTelefono, 0, sizeof(record.numeroTelefono));
/* Resetto il valore della stringa risposta */
memset(risposta, 0, RISPOSTA);
/* Digito il nome da aggiungere */
printf("\nInserisci nome e premi INVIO ");fflush(stdout);
while(scanf("%s", record.nome) == -1){
if(errno != EINTR){
printf("\nErrore scanf\n");
chiusuraClient();
}
}
/* Invio il nome al server */
while(send(sock, record.nome,strlen(record.nome),0) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush(stdout);
return -1;
}
else{
printf("Lettura fallita\n");fflush(stdout);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush(stdout); }
/* Digito il cognome da aggiungere */
printf("\nInserisci cognome e premi INVIO ");fflush(stdout); while(scanf("%s", record.cognome) == -1){
if(errno != EINTR){
printf("\nErrore scanf\n");
chiusuraClient();
}
}
/* Invio il cognome al server */
while(send(sock, record.cognome, strlen(record.cognome),0) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush(stdout);
return -1;
}
else{
printf("Lettura fallita\n");fflush(stdout);
perror("Errore tipo");fflush(stdout);
return -1; } }
printf("Errore durante la system call, ripeto\n");fflush(stdout); }
/* Digito il numero di telefono da aggiungere */
printf("\nInserisci numero di telefono e premi INVIO ");fflush(stdout);
while(scanf("%s", record.numeroTelefono) == -1){
if(errno != EINTR){
printf("\nErrore scanf\n");
chiusuraClient();
}
}
/* Invio il numero di telefono al server */
while(send(sock, record.numeroTelefono, strlen(record.numeroTelefono),0) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush(stdout);
return -1;
}
else{
printf("Lettura fallita\n");fflush(stdout);
perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush(stdout); }
/* Ricevo la risposta dal server */
while(recv(sock, risposta, RISPOSTA,0) <= 0){
if(errno != EINTR){
if(errno == ECONNRESET || errno == EPIPE){
printf("\n\nCONNESSIONE INTERROTTA, il server si è disconnesso in maniera scorretta!");fflush(stdout);
return -1;
}
else{
printf("Lettura fallita Numero tel\n");fflush(stdout); perror("Errore tipo");fflush(stdout);
return -1;
}
}
printf("Errore durante la system call, ripeto\n");fflush(stdout);
}
/* Il record è già presente nell'archivio */ if(strcmp(risposta, "NO") == 0){
printf("\nTentativo fallito. Record già presente nell'archivio!\n");fflush(stdout);
premiInvio();
return 1;
}
/* Operazione conclusa con successo */
else{
printf("\nOperazione conclusa con successo!\n");fflush(stdout); premiInvio();
return 1;
}
}
/* Non ho i permessi sufficienti per questa operazione */
else{
printf("\nPermessi non sufficienti per quest'operazione!\n"); premiInvio();
return 1;
}
}
mentre la struct di Record l'ho scritta così:
codice:
typedef struct{
char nome[NOME];
char cognome[COGNOME];
char numeroTelefono[NUMERO];
}Record;
vi prego datemi una mano...non so proprio come risolvere...grazie!!!