Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Segmentation fault nach längerer Laufzeit

Frage Entwicklung C und C++

Mitglied: LayerAcht

LayerAcht (Level 1) - Jetzt verbinden

14.08.2010 um 19:19 Uhr, 2635 Aufrufe, 3 Kommentare

Hallo an alle Wissenden!

Ich habe ein Problem mit meinem C-Code auf Linux.
Nach einer längeren Laufzeit meines Programms stürzt dieses immer mit einem "segmentation fault" ab. Mittlerweile habe ich auch herausgefunden wo und wann dies passiert. Jedoch kann ich das Problem dennoch nicht lösen.

Die Aufgabe des Programms ist einfach:
Überprüfe alle 60 sek. ob auf einem der 3 E-Mailpostfächer eine E-Mail auf mich wartet.

Um herauszufinden wo das Problem liegt, habe ich ein einfaches printf verwendet (Siehe Code). Damit konnte ich sehen an welcher Stelle das Programm ein "segmentation fault" bekommt. (Wahrscheinlich gibt es einen leichteren und besseren Weg, aber warum einfach wenn es auch schwer geht...)
Somit konnte ich jedenfalls herausfinden, dass das Programm beim 204 ausführen der for-schleife beim letzten sscanf hängen bleibt.

01.
#include <stdio.h> 
02.
#include <string.h> 
03.
 
04.
char new_mail[1024]; 
05.
char mailbuffer[11]; 
06.
int mailbuffer_gesamt; 
07.
int mailbuffer_gelesen; 
08.
int mail_ungelesen_a_1; 
09.
int mail_ungelesen_a_2; 
10.
int mail_ungelesen_a_3; 
11.
int mail_ungelesen; 
12.
FILE *mail; 
13.
int r=0; 
14.
int n; 
15.
 
16.
int main (void) 
17.
18.
printf("Programm wird gestartet...\n"); 
19.
for ( ; ; ) { 
20.
r++; 
21.
mail = popen("fetchmail -c | grep email1@bla.kecks | cut -c 16-21", "r"); 
22.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
23.
	printf("size_t size = strlen(mailbuffer)\n"); 
24.
	size_t size = strlen(mailbuffer); 
25.
	printf("size_t i = 0\n"); 
26.
	size_t i = 0; 
27.
	for ( ; i < size; ++i) { 
28.
		printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n"); 
29.
		if (mailbuffer[i] == '(') mailbuffer[i] = ' '; 
30.
31.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gelesen)\n"); 
32.
	n=1; 
33.
	printf("Runde: %i E-Mail: %i\n", r, n); 
34.
	sscanf (mailbuffer,"%d",&mailbuffer_gelesen); 
35.
36.
 
37.
mail = popen("fetchmail -c | grep email1@bla.kecks | cut -c 1-5", "r"); 
38.
	while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
39.
		printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
40.
		sscanf (mailbuffer,"%d",&mailbuffer_gesamt); 
41.
42.
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen); 
43.
mail_ungelesen_a_1 = mailbuffer_gesamt - mailbuffer_gelesen; 
44.
 
45.
mail = popen("fetchmail -c | grep email2@bla.kecks | cut -c 16-21", "r"); 
46.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
47.
	printf("size_t size = strlen(mailbuffer)\n"); 
48.
	size_t size = strlen(mailbuffer); 
49.
	printf("size_t i = 0\n"); 
50.
	size_t i = 0; 
51.
	for ( ; i < size; ++i) { 
52.
		printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n"); 
53.
		if (mailbuffer[i] == '(') mailbuffer[i] = ' '; 
54.
55.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt);\n"); 
56.
	n=2; 
57.
	printf("Runde: %i E-Mail: %i\n", r, n); 
58.
	sscanf (mailbuffer,"%d",&mailbuffer_gelesen); 
59.
60.
 
61.
mail = popen("fetchmail -c | grep email2@bla.kecks | cut -c 1-5", "r"); 
62.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
63.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
64.
	sscanf (mailbuffer,"%d",&mailbuffer_gesamt); 
65.
66.
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen); 
67.
mail_ungelesen_a_2 = mailbuffer_gesamt - mailbuffer_gelesen; 
68.
 
69.
mail = popen("fetchmail -c | grep email3@bla.kecks | cut -c 16-21", "r"); 
70.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
71.
	printf("size_t size = strlen(mailbuffer)\n"); 
72.
	size_t size = strlen(mailbuffer); 
73.
	printf("size_t i = 0\n"); 
74.
	size_t i = 0; 
75.
	for ( ; i < size; ++i) { 
76.
		printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n"); 
77.
		if (mailbuffer[i] == '(') mailbuffer[i] = ' '; 
78.
79.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
80.
	n=3; 
81.
	printf("Runde: %i E-Mail: %i\n", r, n); 
82.
	sscanf (mailbuffer,"%d",&mailbuffer_gelesen); 
83.
84.
 
85.
mail = popen("fetchmail -c | grep email3@bla.kecks | cut -c 1-5", "r"); 
86.
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) { 
87.
	printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n"); 
88.
	sscanf (mailbuffer,"%d",&mailbuffer_gesamt); 
89.
90.
 
91.
printf("pclose(mail)\n"); 
92.
pclose(mail); 
93.
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen); 
94.
mail_ungelesen_a_3 = mailbuffer_gesamt - mailbuffer_gelesen; 
95.
mail_ungelesen = mail_ungelesen_a_1 + mail_ungelesen_a_2 + mail_ungelesen_a_3; 
96.
printf("%i + %i + %i = %i\n", mail_ungelesen_a_1, mail_ungelesen_a_2, mail_ungelesen_a_3, mail_ungelesen); 
97.
 
98.
printf("Anzeige der ungelesenen Nachrichten\n"); 
99.
if (mail_ungelesen > 1) { 
100.
	snprintf(new_mail, sizeof(new_mail), "Sie haben %i neue Nachrichten", mail_ungelesen); 
101.
	[...] 
102.
} else if (mail_ungelesen == 1) { 
103.
	snprintf(new_mail, sizeof(new_mail), "Sie haben %i neue Nachricht  ", mail_ungelesen); 
104.
	[...] 
105.
} else { 
106.
	printf("Keine Nachrichten...\n"); 
107.
	[...] 
108.
109.
printf("60 sek. warten...\n"); 
110.
sleep(60); 
111.
printf("auf neue E-Mails ueberpruefen...\n"); 
112.
113.
}
Zur Vervollständigung:
der Aufruf von
01.
fetchmail -c | grep email1@bla.kecks | cut -c 1-5
bzw.
01.
fetchmail -c | grep email1@bla.kecks | cut -c 16-21

ergibt sowas wie
01.
244 N
bzw.
01.
 (244 
Wahrscheinlich ist es nur ein einfaches Anfängerproblem. Ich hoffe mir kann jemand helfen.

Vielen Dank!
Mitglied: dog
14.08.2010 um 20:09 Uhr
Du öffnest pro Durchlauf 6 FILE-Streams aber schließt nur einen...

Und für den Rest gibt es gdb
Bitte warten ..
Mitglied: LayerAcht
14.08.2010 um 20:36 Uhr
achso, ich dachte ich schließe damit alle, da diese ja gleich heißen. Ich versuch es mal.
Danke
Bitte warten ..
Mitglied: LayerAcht
14.08.2010 um 21:45 Uhr
Super. Es hat funktioniert. Manchmal sind es halt die einfachen Dinge im Leben.
Vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Festplatten, SSD, Raid
Laufzeit von Festplatten im RAID anzeigen (20)

Frage von 114801 zum Thema Festplatten, SSD, Raid ...

Batch & Shell
Per Script Laufzeit PC im AD hgerausfinden (6)

Frage von 14634 zum Thema Batch & Shell ...

Windows 10
gelöst PCs über eine Batch Datei nach 2 Tagen Laufzeit automatisch herunterfahren (12)

Frage von Karsten70154 zum Thema Windows 10 ...

Backup
gelöst Wie lange muss man eine Datensicherung aufbewahren ? (11)

Frage von achim222 zum Thema Backup ...

Neue Wissensbeiträge
Linux Netzwerk

Ping und das einstellbare Bytepattern

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
SAN, NAS, DAS
MSA 2050 RAID Konfig (21)

Frage von Leo-le zum Thema SAN, NAS, DAS ...

Netzwerkmanagement
Windows Server 2008 R2: "netsh reset" nicht verfügbar? (9)

Frage von RickTucker zum Thema Netzwerkmanagement ...

Hosting & Housing
CNAME auf FTP funkt nicht mehr (7)

Frage von Wintektiv zum Thema Hosting & Housing ...

Netzwerkmanagement
Suche eine Software für Cloudverwaltung (6)

Frage von tsunami zum Thema Netzwerkmanagement ...