segmentation fault ( core dump ), bin c-dummie ;-p
-
kann mir einer von euch profis bitte sagen, was ich falsch gemacht habe?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{
int i = 0;
float min, max, m;
char string [500];
char * pch;
char * pEnd;
double dbl;
FILE * pFile;
char * buffer;min = max = m = 0;
pFile = fopen("mur2eur.dat","r");
if (pFile==NULL) perror ("Error opening file");
buffer = (char*) malloc (500);
if (buffer==NULL) exit (1);
fgets (string , 500 , pFile);
pch=strchr(pch+1,'s');
pch = strchr(string,'\t');
dbl = strtod (string,&pEnd);
i = i+1;
min = dbl;
max = dbl;
free ( buffer );
while (!feof(pFile))
{
buffer = (char*) malloc (i+1);
if (buffer==NULL) exit (1);
fgets (string , 500 , pFile);
pch=strchr(string,'\t');
dbl = strtod(string,&pEnd);
i = i+1;
if(dbl <= min)min = dbl;
if(dbl >= max)max = dbl;
free ( buffer );}
fclose(pFile);
m = ( min + max ) / 2;
printf("Anzahl Umtaeusche: %d\n",i);
printf("kleinster EUR-Wert: %f\n",min);
printf("groesster EUR-Wert: %f\n",max);
printf("mittlerer EUR-Wert: %f\n",m);return 0;
}mur2eur.dat-inhalt:
20.000000 0.607200
6.500000 0.197340
75.879997 2.303717
45.000000 1.366200die zwischenräume sind
\\t
vielen dank
-
Sowas kann man nicht lesen. Bitte editiere dein Post und benutze CPP Tags und rücke deinen Code ein.
-
@funny
nur damit du verstehst, was supertux meint... im origianal hast du es doch auch eingerückt? wieso nutzt du nicht das wunder der codetags#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i = 0; float min, max, m; char string [500]; char * pch; char * pEnd; double dbl; FILE * pFile; char * buffer; min = max = m = 0; pFile = fopen("mur2eur.dat","r"); if (pFile==NULL) perror ("Error opening file"); buffer = (char*) malloc (500); if (buffer==NULL) exit (1); fgets (string , 500 , pFile); pch=strchr(pch+1,'s'); pch = strchr(string,'\t'); dbl = strtod (string,&pEnd); i = i+1; min = dbl; max = dbl; free ( buffer ); while (!feof(pFile)) { buffer = (char*) malloc (i+1); if (buffer==NULL) exit (1); fgets (string , 500 , pFile); pch=strchr(string,'\t'); dbl = strtod(string,&pEnd); i = i+1; if(dbl <= min)min = dbl; if(dbl >= max)max = dbl; free ( buffer ); } fclose(pFile); m = ( min + max ) / 2; printf("Anzahl Umtaeusche: %d\n",i); printf("kleinster EUR-Wert: %f\n",min); printf("groesster EUR-Wert: %f\n",max); printf("mittlerer EUR-Wert: %f\n",m); return 0; }
-
entschuldigung, komme mit diesem bb-code nicht klar, wenn ich den beitrag abschicke, isser wieder weg, der 2. versuch sollte eigentlich klappen, habs aber nicht hinbekommen, ist halt mein erstes source-file, was ich hierher schicke.
da nun aber jemand so nett war, es richtig hinzubasteln, wäre ich dankbar, wenn mir nun jemand die frage beantworten könnte.
danke
-
Das problem liegt bei
pch=strchr(pch+1,'s');
dies musst du zu
pch=strchr(string,'s');
ändern, dann geht es...
Mit Hilfe des Debuggers war dieses Problem eigentlich ganz leicht zu finden...
-
an guenni81:
vielen lieben dank!!
-
Wenn du mit VC++ arbeitest, dann kannst du mit der F10 Taste den QuellCode Zeilenweise durchgehen, so findet man solche Fehler schnell...
-
hab den dev-c++ zu hause und gcc von unix an der uni,
danke nochmal