(ANSI C) Segmentation Fault
-
Hallo,
ich habe folgendes Programm:
#include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int main(int argc, char *argv[]) { FILE* handle; int reason_c = 25; char *reason; reason=(char *)malloc(sizeof(*reason)); if((handle = fopen ("/var/log/syslog","r")) != NULL) { fseek(handle, -1L, SEEK_END); do { fread(reason[reason_c], 1, 1, handle); fseek(handle, -1L, SEEK_CUR); reason_c = reason_c - 1; }while(reason[reason_c-1] == " "); printf(reason); system("echo \"Success\" | mail -s \"NMS Trap (scotty)\" dronde@koeln.sema.slb.com"); } else { system("echo \"Failed loading the System-Log\" | mail -s \"NMS Trap (scotty)\" dronde@koeln.sema.slb.com"); } return 0; }
das ganze wird vom GCC unter Linux auch compiliert...
Bei der Ausführung läuft es aber nicht und meldet einen Segementation Fault...Wenn ich das ganze auf einer Linux-Emulation einsetzte geht es Problemlos...
Hat jemand eine Ahnung???
Danke
handyman
-
Lass Dir in einem printf mal sizeof(*reason) ausgeben und überdenke Dein malloc.
Am Ende solltest Du außerdem free aufrufen.
-
Das stimmt eigentlich alles soweit...
Aber jetzt sagt der Compiler:main.c: In function
int main(int, char **)': main.c:33: passing \
char' to argument 1 of `fread(void *, unsigned int, unsigned int, FILE *)' lacks a cast
main.c:36: ANSI C++ forbids comparison between pointer and integer
main.c:9: warning: unused parameterint argc' main.c:9: warning: unused parameter
char ** argv'
*
-
Ich habe keine Ahnung was Du gemacht hast - eigentlich meinte ich meinen Kommentar so:
char *reason; reason=(char *)malloc(reason_c + 1); .... free(reason);
[ Dieser Beitrag wurde am 19.12.2002 um 11:15 Uhr von pfalzmarc editiert. ]
-
[ Dieser Beitrag wurde am 19.12.2002 um 11:14 Uhr von pfalzmarc editiert. ]
-
schau dir doch mal an was der Compiler dir sagt.
main.c:33: passing `char' to argument 1 of `fread(void *, unsigned int, unsigned int, FILE *)' lacks a cast
freiübersetzt:
main.c Zeile 33: char als erstes Argument für eine Funktion die einen void Pointer dort erwartet ist sehr trottelig, vorallem wenn man meine Warnung missachtet.und den Rückgabewert von malloc soll man nicht casten!
Ab nach ANSI C ->
[ Dieser Beitrag wurde am 19.12.2002 um 16:54 Uhr von kingruedi editiert. ]