Speicherzugriffsfehler
Speicherzugriffsfehler
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
**********************************************
#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
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(int argc, char **argv)
{
if(argc < 2)
return 2;
char *filename = argv[1];
FILE *fp;
if( (fp=fopen(filename,"rw")) == NULL )
{
printf("Datei %s nicht gefunden!\n", filename);
return -1;
}
if (!fclose(fp))
printf("Datei erfolgrein geschlossen!\n");
return 1;
}
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?
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?
-
- prolinux-forum-admin
- Posts: 1444
- Joined: 26. Jun 2004 21:18
- Contact:
> 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.
Dein Problem ist nicht der Code.
MfG, Klopskuchen
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:~/test$ gcc probe.c -o probe
probe.c:19:2: warning: no newline at end of file
user@host:~/test$ touch test.txt
user@host:~/test$ probe test.txt
Datei erfolgrein geschlossen!
user@host:~/test$
MfG, Klopskuchen
When all else fails, read the instructions .
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:
Gruß,
hjb
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()
int main(int argc, char** argv)
int main(int argc, char** argv, char** envp)
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
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
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
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:
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.
Ein Speicherzugriffsfehler tritt zum Beispiel hier auf:
Code: Select all
int nummer[20];
printf("Nummer[23] = %d\n", nummer[23]);
Wenn ein Prozess auf Speicher zugreifen könnte, der ihm nicht gehört, so könnte er damit andere Prozesse manipulieren.
-
- prolinux-forum-admin
- Posts: 1444
- Joined: 26. Jun 2004 21:18
- Contact:
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
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 .