Ciao a tutti,
nuovo esercizio del libro Deitel e nuovo problema che va oltre la mia comprensione.
Questo è il codice (mancano ancora 2 funzioni ma non è rilevante)
#include <stdio.h>
void printResults(const char *[], int [][10]);
int main(void){
const char * questions [5]={"Energy sources and Earth pollution",
"Democracy, freedom and progress",
"Technology, culture and human knowdledge",
"Animal exploitation and meat overproduction",
"Global Governance"};
int answers[5][10];
int user;
int countQ;
system("clear");
for(user=1;user<=10;user++){
printf("User %d,Please rate the following issues from 1 (not important) to 10 (most important):\n\n"
,user);
for (countQ=0;countQ<5;countQ++){
printf("\n%s:",questions[countQ]);
scanf("%d", &answers[countQ][user]);
}
printf("\nThank you for your cooperation!\n");
}
printResults( questions, answers);
/* printBest(questions, answers);
printWorse(questions, answers); */
return 0;
}
void printResults(const char *items[], int rates[][10]){
int r,c;
int average[5];
int parTotal;
printf("\n 1 - 2 - "
"3 - 4 - 5 - 6 - 7 - 8"
" - 9 - 10 - Average \n\n");
for (r=0; r<5;r++){
printf("\n%44s: ", items[r]);
parTotal=0;
for(c=0;c<10;c++){
printf("%4d", rates[r][c]);
parTotal+=rates[r][c];
}
average[r]=parTotal/10;
printf ("%4d", average[r]);
}
printf("\n\n");
}
il problema è che mi da segfault (SIGSEGV) alla chiamata della funzione printResults. Più precisamente, con gdb all'istruzione printf("\n%44s: ",items[r]) se controllo le variabili mi da giustamente r=0 ma items[r] mi dice 0x5 <Address 0x5 out of bounds>.
A me l'istruzione sembra uguale a quella della main, printf("\n%s:",questions[countQ]), entrambe si riferiscono allo stesso vettore di puntatori e quando compilo non mi da nè errori ne warnings. cosa c'è che non va? grazie anticipate
ps non sono sicuro che il resto della funzione printResults sia corretto in quanto non ho ancora avuto modo di testarlo per via del segfault,comunque se riesco a proseguire poi vedo di correggere eventuali errori autonomamente.
pps a proposito per curiosità con gdb è possibile assegnare manualmente un valore ad una variabile in fase di debugging? sarebbe utile nel mio caso per proseguire con l'esecuzione per testare altri eventuali problemi.