Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Speicherzugriffsfehler

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
tobi_odi



Anmeldungsdatum: 30.12.2003
Beiträge: 18
Wohnort: Dresden

BeitragVerfasst am: 08. Jun 2005 17:19   Titel: 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
 
Benutzer-Profile anzeigen Private Nachricht senden

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 08. Jun 2005 17:59   Titel:

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:
#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;
}
 
Benutzer-Profile anzeigen Private Nachricht senden

tobi_odi



Anmeldungsdatum: 30.12.2003
Beiträge: 18
Wohnort: Dresden

BeitragVerfasst am: 10. Jun 2005 20:26   Titel:

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?
 
Benutzer-Profile anzeigen Private Nachricht senden

klopskuchen
prolinux-forum-admin


Anmeldungsdatum: 26.06.2004
Beiträge: 1444

BeitragVerfasst am: 10. Jun 2005 21:08   Titel:

> 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:

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$

Dein Problem ist nicht der Code.

MfG, Klopskuchen
_________________
When all else fails, read the instructions .
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

hjb
Pro-Linux


Anmeldungsdatum: 15.08.1999
Beiträge: 3236
Wohnort: Bruchsal

BeitragVerfasst am: 11. Jun 2005 10:55   Titel:

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:
int main()
int main(int argc, char** argv)
int main(int argc, char** argv, char** envp)


Gruß,
hjb
_________________
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger

tobi_odi



Anmeldungsdatum: 30.12.2003
Beiträge: 18
Wohnort: Dresden

BeitragVerfasst am: 17. Jun 2005 20:35   Titel:

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 18. Jun 2005 7:54   Titel:

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:
int nummer[20];
printf("Nummer[23] = %d\n", nummer[23]);


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.
 
Benutzer-Profile anzeigen Private Nachricht senden

klopskuchen
prolinux-forum-admin


Anmeldungsdatum: 26.06.2004
Beiträge: 1444

BeitragVerfasst am: 18. Jun 2005 21:45   Titel:

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 Wink

MfG, Klopskuchen
_________________
When all else fails, read the instructions .
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

tobi_odi



Anmeldungsdatum: 30.12.2003
Beiträge: 18
Wohnort: Dresden

BeitragVerfasst am: 30. Jun 2005 21:15   Titel:

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy