J'ai une fonction qui traite certaines données et trouve le seuil qui classe les données avec l'erreur la plus faible. Il ressemble à ceci:La fonction C change le comportement selon qu'il y a un appel à printf
void find_threshold(FeatureVal* fvals, sampledata* data, unsigned int num_samples, double* thresh, double* err, int* pol) {
//code to calculate minThresh, minErr, minPol omitted
printf("minThresh: %f, minErr: %f, minPol: %d\n", minThresh, minErr, minPol);
*thresh = minThresh;
*err = minErr;
*pol = minPol;
}
Puis dans mon dossier de test, j'ai ceci:
void test_find_threshold() {
//code to set up test data omitted
find_threshold(fvals, sdata, 6, &thresh, &err, &pol);
printf("Expected 5 got %f\n", thresh);
assert(eq(thresh, 5.0));
printf("Expected 1 got %d\n", pol);
assert(pol == 1);
printf("Expected 0 got %f\n", err);
assert(eq(err, 0.0));
}
Cela va et le test passe avec la sortie suivante:
minThresh: 5.000000, minErr: 0.000000, minPol: 1
Expected 5 got 5.000000
Expected 1 got 1
Expected 0 got 0.000000
Toutefois, si je retire l'appel à printf() de find_threshold, le test échoue soudainement! Commentant l'affirme pour que je puisse voir ce qui est renvoyée, la sortie est:
Expected 5 got -15.000000
Expected 1 got -1
Expected 0 got 0.333333
Je ne peux aucun sens de ce que ce soit.
Le problème peut être dans le code que vous avez omis (// code pour calculer minThresh, minErr, minPol omis) –
Ce que vous avez écrit me semble bon à première vue, donc l'erreur réelle réside probablement dans le code que vous avez omis. Êtes-vous sûr que lorsque vous supprimez l'appel 'printf', le code après qu'il est encore en cours d'exécution? Pouvez-vous exécuter ceci dans un débogueur de niveau source (tel que gdb)? –
Alias de pointeur? – kennytm