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:
il codice è :codice:Run-Time Check Failure #2-Stack around the variable 'record' was corrupted
mentre la struct di Record l'ho scritta così: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; } }
codice:typedef struct{ char nome[NOME]; char cognome[COGNOME]; char numeroTelefono[NUMERO]; }Record;
vi prego datemi una mano...non so proprio come risolvere...grazie!!!

Rispondi quotando
