Segmentation fault nach längerer Laufzeit
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.
Zur Vervollständigung:
der Aufruf von bzw.
ergibt sowas wie
bzw.
Wahrscheinlich ist es nur ein einfaches Anfängerproblem. Ich hoffe mir kann jemand helfen.
Vielen Dank!
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.
#include <stdio.h>
#include <string.h>
char new_mail[1024];
char mailbuffer[11];
int mailbuffer_gesamt;
int mailbuffer_gelesen;
int mail_ungelesen_a_1;
int mail_ungelesen_a_2;
int mail_ungelesen_a_3;
int mail_ungelesen;
FILE *mail;
int r=0;
int n;
int main (void)
{
printf("Programm wird gestartet...\n");
for ( ; ; ) {
r++;
mail = popen("fetchmail -c | grep email1@bla.kecks | cut -c 16-21", "r");
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) {
printf("size_t size = strlen(mailbuffer)\n");
size_t size = strlen(mailbuffer);
printf("size_t i = 0\n");
size_t i = 0;
for ( ; i < size; ++i) {
printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n");
if (mailbuffer[i] == '(') mailbuffer[i] = ' ';
}
printf("sscanf (mailbuffer, d ,&mailbuffer_gelesen)\n");
n=1;
printf("Runde: %i E-Mail: %i\n", r, n);
sscanf (mailbuffer,"%d",&mailbuffer_gelesen);
}
mail = popen("fetchmail -c | grep email1@bla.kecks | cut -c 1-5", "r");
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) {
printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n");
sscanf (mailbuffer,"%d",&mailbuffer_gesamt);
}
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen);
mail_ungelesen_a_1 = mailbuffer_gesamt - mailbuffer_gelesen;
mail = popen("fetchmail -c | grep email2@bla.kecks | cut -c 16-21", "r");
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) {
printf("size_t size = strlen(mailbuffer)\n");
size_t size = strlen(mailbuffer);
printf("size_t i = 0\n");
size_t i = 0;
for ( ; i < size; ++i) {
printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n");
if (mailbuffer[i] == '(') mailbuffer[i] = ' ';
}
printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt);\n");
n=2;
printf("Runde: %i E-Mail: %i\n", r, n);
sscanf (mailbuffer,"%d",&mailbuffer_gelesen);
}
mail = popen("fetchmail -c | grep email2@bla.kecks | cut -c 1-5", "r");
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) {
printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n");
sscanf (mailbuffer,"%d",&mailbuffer_gesamt);
}
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen);
mail_ungelesen_a_2 = mailbuffer_gesamt - mailbuffer_gelesen;
mail = popen("fetchmail -c | grep email3@bla.kecks | cut -c 16-21", "r");
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) {
printf("size_t size = strlen(mailbuffer)\n");
size_t size = strlen(mailbuffer);
printf("size_t i = 0\n");
size_t i = 0;
for ( ; i < size; ++i) {
printf("if (mailbuffer[i] == '(') mailbuffer[i] = ' '\n");
if (mailbuffer[i] == '(') mailbuffer[i] = ' ';
}
printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n");
n=3;
printf("Runde: %i E-Mail: %i\n", r, n);
sscanf (mailbuffer,"%d",&mailbuffer_gelesen);
}
mail = popen("fetchmail -c | grep email3@bla.kecks | cut -c 1-5", "r");
while (fgets(mailbuffer, sizeof(mailbuffer)-1, mail) != NULL) {
printf("sscanf (mailbuffer, d ,&mailbuffer_gesamt)\n");
sscanf (mailbuffer,"%d",&mailbuffer_gesamt);
}
printf("pclose(mail)\n");
pclose(mail);
printf("%i, %i\n", mailbuffer_gesamt, mailbuffer_gelesen);
mail_ungelesen_a_3 = mailbuffer_gesamt - mailbuffer_gelesen;
mail_ungelesen = mail_ungelesen_a_1 + mail_ungelesen_a_2 + mail_ungelesen_a_3;
printf("%i + %i + %i = %i\n", mail_ungelesen_a_1, mail_ungelesen_a_2, mail_ungelesen_a_3, mail_ungelesen);
printf("Anzeige der ungelesenen Nachrichten\n");
if (mail_ungelesen > 1) {
snprintf(new_mail, sizeof(new_mail), "Sie haben %i neue Nachrichten", mail_ungelesen);
[...]
} else if (mail_ungelesen == 1) {
snprintf(new_mail, sizeof(new_mail), "Sie haben %i neue Nachricht ", mail_ungelesen);
[...]
} else {
printf("Keine Nachrichten...\n");
[...]
}
printf("60 sek. warten...\n");
sleep(60);
printf("auf neue E-Mails ueberpruefen...\n");
}
}
Zur Vervollständigung:
der Aufruf von
fetchmail -c | grep email1@bla.kecks | cut -c 1-5
fetchmail -c | grep email1@bla.kecks | cut -c 16-21
ergibt sowas wie
244 N
(244
Wahrscheinlich ist es nur ein einfaches Anfängerproblem. Ich hoffe mir kann jemand helfen.
Vielen Dank!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 149006
Url: https://administrator.de/forum/segmentation-fault-nach-laengerer-laufzeit-149006.html
Ausgedruckt am: 16.05.2025 um 00:05 Uhr
3 Kommentare
Neuester Kommentar