Speicherzugriffsfehler

Post Reply
Message
Author
tobi_odi
Posts: 18
Joined: 30. Dec 2003 22:27
Location: Dresden

Speicherzugriffsfehler

#1 Post by tobi_odi »

ich versuche eine Datei irgendwie.txt in meinem home-Verzeichnis zu öffnen aber ich bekomme immer wieder die Fehlermeldung "Speicherzugriffsfehler".

**********************************************

#include <stdio.h>
#include <stdlib.h>

int main(char file[1024])
{
FILE *fp;
if((fp=fopen(file,"rw"))==NULL)
{
printf("Datei %s nicht gefunden!\n",file);
return -1;
}
if (!fclose(fp))
printf("Datei erfolgrein geschlossen!\n");
return 1;
}

**********************************************

Kann da jemand einen Tip geben?

Gruß Tobi

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#2 Post by Lateralus »

Ich weiß nicht, ob du ein solches Argument an die main übergeben kannst. Eigentlich ist das erste Argument immer ein int und das Zweite ein char **. So müsste es gehen:

Code: Select all

#include <stdio.h>
#include <stdlib.h>

int main&#40;int argc, char **argv&#41;
&#123;
        if&#40;argc < 2&#41;
                return 2;

        char *filename = argv&#91;1&#93;;
        FILE *fp;
        if&#40; &#40;fp=fopen&#40;filename,"rw"&#41;&#41; == NULL &#41;
        &#123;
                printf&#40;"Datei %s nicht gefunden!\n", filename&#41;;
                return -1;
        &#125;
        if &#40;!fclose&#40;fp&#41;&#41;
                printf&#40;"Datei erfolgrein geschlossen!\n"&#41;;
        return 1;
&#125;

tobi_odi
Posts: 18
Joined: 30. Dec 2003 22:27
Location: Dresden

#3 Post by tobi_odi »

Vielen Dank Lateralus für deinen Tip. Leider hat es nicht zum gewünschten Erfolg geführt. Was bedeutet den der Fehler Speicherzugriffsfehler?

Ich habe das listing der benutzten Dateien angehängt.

-rwxr-xr-x 1 ich users 9666 2005-06-10 21:16 test
-rw-rw-rw- 1 ich users 19 2005-06-08 18:00 test.txt

in der Konsole führe ich ./test test.txt aus und versuche auf die Textdatei zuzugreifen. Leider funktioniert der Zugriff nicht und die Datei wird nicht geöffnet. Was kann den der Sache noch im Weg stehen?

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#4 Post by klopskuchen »

> Was bedeutet den der Fehler Speicherzugriffsfehler?
Ein Prozess versucht in einen Speicherbereich zu schreiben oder aus einem Speicherbereich zu lesen auf den er keinen
berechtigten Zugriff hat.

Code: Select all

user@host&#58;~/test$ gcc probe.c -o probe
probe.c&#58;19&#58;2&#58; warning&#58; no newline at end of file
user@host&#58;~/test$ touch test.txt
user@host&#58;~/test$ probe test.txt
Datei erfolgrein geschlossen!
user@host&#58;~/test$
Dein Problem ist nicht der Code.

MfG, Klopskuchen
When all else fails, read the instructions .

User avatar
hjb
Pro-Linux
Posts: 3264
Joined: 15. Aug 1999 16:59
Location: Bruchsal
Contact:

#5 Post by hjb »

Hi!

Zu dem Code ist noch anzumerken, daß ein C-Programm nur Werte von 0 bis 255 (oder 127?) zurückgeben sollte. 0 steht für Erfolg, alles andere meistens für Mißerfolg.

Die Funktion main darf man auf drei Arten angeben, alles andere ist falsch:

Code: Select all

int main&#40;&#41;
int main&#40;int argc, char** argv&#41;
int main&#40;int argc, char** argv, char** envp&#41;
Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?

tobi_odi
Posts: 18
Joined: 30. Dec 2003 22:27
Location: Dresden

#6 Post by tobi_odi »

Vielen Dank für eure Beiträge zum Thema, leider habe ich das vorliegende Problem noch nicht beseitigen können.

Nocheinmal mein meine Hauptschwierigkeit. Ich kann mir die Herkunft des Speicherzugriffsfehlers nicht erklären. Ich befinde mich in meinem home Verzeichnis und habe eine neue Textdatei angelegt und versuche diese zu öffnen und zu lesen/schreiben, was aber nicht funktioniert.

Wie kann ich dem Problem auf die Schliche kommen?

Gruß tobi

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#7 Post by Lateralus »

Wie klopskuchen schon zu erklären versucht hat, hat ein Speicherzugriffsfehler nichts mit deinen Schreibrechten oder dergleichen zu tun. Ein Speicherzugriffsfehler (segmentation fault) tritt auf, wenn ein Prozess auf Speicher zugreift, der ihm nicht gehört. Dabei handelt es sich um RAM-Speicher, da ein Programm zum Ausführen in den RAM geladen wird.

Ein Speicherzugriffsfehler tritt zum Beispiel hier auf:

Code: Select all

int nummer&#91;20&#93;;
printf&#40;"Nummer&#91;23&#93; = %d\n", nummer&#91;23&#93;&#41;;
Nummer[23] zeigt auf einen Speicherbereich, der dem Prozess nicht gehört. Daher tritt eine Segfault auf.

Wenn ein Prozess auf Speicher zugreifen könnte, der ihm nicht gehört, so könnte er damit andere Prozesse manipulieren.

klopskuchen
prolinux-forum-admin
Posts: 1444
Joined: 26. Jun 2004 21:18
Contact:

#8 Post by klopskuchen »

Hast du Lateralus' Code verwendet? Evtl. ein Tippfehler, etwas was sich unglücklicherweise fehlerfrei kompilieren liess und erst bei Ausführung querschlägt.
Welchen Compiler (+ Versionsnummer) verwendest du?
Welchen Befehl genau setzt du bei Aufruf des Programmes ab?

ps. Dresden? Da gibts eine LUG+ML mit kompetenten Programmierkundigen. && @admins < nicht haun ;)

MfG, Klopskuchen
When all else fails, read the instructions .

tobi_odi
Posts: 18
Joined: 30. Dec 2003 22:27
Location: Dresden

#9 Post by tobi_odi »

Also erst einmal ein dickes Dankeschön an die Helfer.

Problem erkannt, Problem gebannt!
Nachdem ich den Hintergrund des Fehlers verstanden hatte, hab ich auch den Fehler gefunden.

Klassischer Tippfehler!!!

Gruß tobi

Post Reply