printdir

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

printdir
Grueuzi
Hab ein Problem mit PRINTDIR Wenn ich mein Programm laufen lasse, bekomme ne Meldung: SEGMENTATION FAULT
Was sollte ich dagegen tun? Danke.


Laufen.

Im Ernst, bei einer so detaillierten Problembeschreibung kann dir leider niemand helfen. Vermutlich verwendest Du irgendwo einen ungültigen Pointer.
Kompiliere Dein Programm mit -g und führe es im gdb aus. Dann solltest Du zumindest die Code Zeile kennen in der der Fehler auftritt. Evtl kann man erraten woran es liegt wenn Du uns diese Zeile postest.
Ansonsten ist natürlich der Besuch einer Rechnerübung empfehlenswert.

Zu guter letzt noch mein Lieblings(*) SegFault Fehler bei Printdir.
Dieser kann in dieser Art in verschiedenen Variationen auftreten.

struct stat *mystat;
...
lstat(completefilename, mystat);

Da nirgends Speicher für die Struktur allokiert wird und in der Pointervariablen irgendein Müll steht bekommst Du hier natürlich einen SegFault.
Besser ist

struct stat mystat;
...
lstat(completefilename, &mystat);

(*) weil am häufigsten gemacht

Ups falsches Icon :wink:


Nach aufgabe 4 kann mich kein Segfault mehr Schocken :wink:


Hi.
Ich hab´ wieder ein Problem mit Compiler…

Für:

  1. struct stat my_stat;
  2. if ( lstat(tmp, &my_stat) == -1) …
    oder
    if ( (lstat(tmp, &my_stat)) == -1)
  3. printf(“%s\t”, my_stat.st_nlink);

bekomme ich:
warning: implicit declaration of function `lstat’
warning: format argument is not a pointer (arg 2)

Weiss jmd. “was ist”?


Die Compiler warnung “implicit declaration” kommt immer, wenn du vergessen hast die entsprechende Header Datei der jeweiligen Funktion mit include einzubinden.
Bei lstat fehlt also

#include <sys/stat.h>

Die zweite Warnung dürfte sich darauf beziehn, dass du bei printf einen String ausgeben möchtest, dann aber letztlich einen Integer-Wert als zweites Argument übergiebst. Versuchs einfach so:

printtf("%d\t", my_stat.st_nlink );

Nein! Es ist drin…

Das ist richtig. Danke!

re
lstat geht nur, wenn man nicht mit -D_POSIX_SOURCE kompiliert. Versuch mal -D_XOPEN_SOURCE=500


Danke, jungs…

Ich hab’ schon gefunden :gun:

Vorher war es nur: -D_XOPEN_SOURCE=500

Und nicht: -D_POSIX_SOURCE -D_XOPEN_SOURCE=500

Also, es läuft jetzt :smiley: