• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Speicherzugriffsfehler bei Entfernen von printf?!?

Calvin

Hacker
Hi allerseits,

ich bereite mich gerade auf eine Klausur vor und ein Teil einer Aufgabe besteht darin, ein kurzes C-Programm zu schreiben. Es geht um ein kurzes Hauptprogramm, dem ein Dateiname als Parameter übergeben wird und das die Inumber des Knotens zurückgeben soll. Hierfür soll der Systemaufruf int stat(const char *filename, struct stat *buf) verwendet werden.

Lange Rede, hier die Fakten. Meine erste Version des Programms war das hier:

Code:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  int a;
  struct stat *buf;
//  printf("Hallo\n");
  if((a = stat(argv[1],buf))==-1)
  {
    printf("Fehler\n");
    return -1;
  }
  printf("%d\n",buf->st_ino);
  return buf->st_ino;
}

Wenn ich das Programm so laufen lasse, bekomme ich einen Speicherzugriffsfehler. Sobald ich die erste printf-Zeile einkommentiere, läuft das Programm durch :shock:

Ich habe ehrlich gesagt keine Idee, woran das liegen könnte *grübel* Hat jemand eine Erklärung dafür?

EDIT
Hm, da scheint noch mehr falsch zu sein *grübel* Auch bei der Ausgabe von argc am Ende bekomme ich einen Speicherzugriffsfehler :shock:

Code:
printf("%d\t%d\n",buf->st_ino,argc);

Es wird wohl Zeit, dass ich ins Bett gehe :?

EDIT2

Habe den Fehler gefunden. Es lag an dem buf-Zeiger. Mit

Code:
  struct stat buf;
  if((a = stat(argv[1],&buf))==-1)
....

funktioniert es. Hat trotzdem noch jemand eine Erklärung für mich?
 

oc2pus

Ultimate Guru
Code:
struct stat *buf;
fernöstlich orientierter Zeiger, zeigt ins Nirwana ...

Code:
struct stat buf;
ah es existiert eine uninitilisierte Variable, die kann man sich dann füllen lassen indem man die Adresse der Variablen an die Funktion übergibt :)
 
OP
C

Calvin

Hacker
Bin mal gespannt wie lange es noch dauert, bis ich das Zeigersystem verstehe *seufz* Hinterher ist immer alles logisch und "einfach". Danke für die Erklärung, oc2pus.
 

abgdf

Guru
Hi,
Bin mal gespannt wie lange es noch dauert, bis ich das Zeigersystem verstehe
Dazu noch generell: Bzgl. Zeigern und C-Strings (um die es hier ja nicht geht) sollte man das hier wissen:

http://www.howstuffworks.com/c36.htm

Wird in vielen C-Büchern leider nicht genau genug erklärt.

Viele Grüße
 
Oben