absturz nach entfernen der Testschleife (übergeben von arrays mit zeigern)
-
Hallo,
habe hier folgendes Problem:
Ich soll für die Uni einige C-Programme schreiben. Unter anderem eins das arithmetisches und geometrisches Mittel sowie den Median einer Liste berechnet.
Arithmetisches und Geometrisches Mittel soweit Ok. aber beim Median ist folgendes Problem aufgetreten:Habe während des Schreibens zum Testen eine Prüfschleife eingebaut.
Hatte mich dann schon gefreut das alles ging doch dann:solange die Schleife noch drinne ist funktioniert alles einwandfrei aber sobald sie entfernt wird hängt sich das ganze programm auf
Verstehe nicht wo das Problem ist, da es sich ja wie gesagt nur um eine Prüfschleife handelt.
Könnte mir höchstens vorstellen das irgendwas mit dem Zeiger falsch gelaufen ist, aber wo weiß ich auch nicht.
Hier mal der SourceCode:danke schon mal für etwaige Hilfe
LG chan#include <stdio.h> #include <stdlib.h> #include <math.h> /* /avg /- calcs the arithmetic mean / */ float avg(int *list, int n){ int i; float average = 0.0f; for(i=0; i < n; i++){ average += list[i]; } return (float)average/n; } /* /geom /- calcs the geometric mean / */ float geom(int *list, int n){ float geom = 1.0f; int i; for(i=0; i < n; i++){ geom *= (float)list[i]; } return pow(geom,1.0f/n); } /* /median /- sorts list /- calcs the median / */ float median(int *list, int n){ int i, j, k; int min, minIndex; for(i=0; i<(n-1); i++){ min = list[i]; for(j=(i+1); j<n; j++){ if(min > list[j]){ min = list[j]; minIndex = j; } } list[minIndex]=list[i]; list[i] = min; } /* / wenn diese schleife entfernt wird stürzt es ab ?? */ ////////////////////////////////// for(k=0;k < n;k++){ printf("%d",list[k]); } ////////////////////////////////// if(n%2==0){return (float)(list[(n/2)-1]+list[n/2])/2;} else {return (float)list[n/2];} } /* /main / */ int main(int argc, char * argv[]){ int marks[] = {1,2,7,5,3,2,4,9,9,9}; int i; printf("\n\n"); printf("List: "); for(i=0;i < sizeof(marks)/sizeof(int);i++){ printf("%d",marks[i]); if(i<((sizeof(marks)/sizeof(int))-1)){ printf(", "); } } printf("\n\n"); printf("aritmetic mean: %f\n", avg(marks, sizeof(marks)/sizeof(int))); printf("geometric mean: %f\n", geom(marks, sizeof(marks)/sizeof(int))); printf(" median: %f\n", median(marks,sizeof(marks)/sizeof(int))); return EXIT_SUCCESS; }
-
Ist denn sichergestellt, dass
minIndex
in Z.56 immer ein gültiger Index ist?
-
Versteif dich mal nicht zu sehr auf diese Schleife. Die macht nichts, was undefiniertes Verhalten verhindert, dass es mit Schleife nicht abstürzt ist also reiner Zufall.
Da minIndex in Zeile 56 als Index benutzt wird, aber vorher möglicherweise abhängig von Bedingungen gar nicht gesetzt wird, könnte das das Problem sein.
-
Super das wars
Dank euch riesig
aber komisch, hatte es ja echt gefühlt tausend mal rein und rausgenommen
und jedes mal das selbe Ergebnis -> mit schleife geht's und ohne nicht
hatte sogar den rechner neu gestartetHauptsache es geht Dankeschön
LG chan