嗨我有一个看起来像这样的程序:
FILE* openFile (char* name) {
FILE *datei = NULL;
if ((datei=fopen(name,"r"))==NULL) {
printf("Error\n");
}
return datei;
}
int getFLoatsFromFile(char *dateiName, float **retVal) {
FILE *datei = openFile("findMaxOfFloats.txt");
printf("Nice!\n");
if (datei = NULL) return 1;
char buffer[256];
int anzahlzahlen=0;
while (fgets(buffer,256,datei)!=NULL)
{
float temp;
sscanf(buffer,"%f\n",&temp);
*retVal = (float*) realloc(*retVal, (anzahlzahlen+1)*sizeof(float));
(*retVal)[anzahlzahlen]= temp;
anzahlzahlen++;
}
fclose(datei);
return anzahlzahlen;
}
void main(int argc, char *argv[]) {
float *numbers;
char* dateiname;
if (argc <2){
printf("The number of arguments is %d\n", argc);
dateiname = "findMaxOfFloats.txt";
}
else {
dateiname = argv[1];
}
float *floatArray = NULL;
int anz = getFLoatsFromFile(dateiname,&floatArray);
int size = sizeof(floatArray)/sizeof(floatArray[0]);
float tempFloat=-FLT_MAX;
int z;
for (z= 0; z<size ; z++) {
if (floatArray[z]>tempFloat) {
tempFloat = floatArray[z];
}
}
printf("%f",tempFloat);
}
导致分段错误(核心转储)。我尝试使用带有回溯的gdb进行调试,然后显示
#0 _IO_fgets (buf=0x7fffffffdb90 "", n=256, fp=0x0) at iofgets.c:47
#1 0x00000000004008b4 in getFLoatsFromFile (
dateiName=0x400a71 "findMaxOfFloats.txt", retVal=0x7fffffffdcd8)
at 1-3.c:24
#2 0x0000000000400951 in main (argc=1, argv=0x7fffffffddd8) at 1-3.c:46
我是C的新手,所以我真的不明白这意味着什么,有人可以解释一下吗?