Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Daten von Binärdatei lesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
20.01.2004, 20:04 Uhr
Vriza



Hoi!

Ich hab von meinem Programmierlehrer ein Projekt aufbekommen in dem ich mit Binärdateien arbeiten muss. Allerdings macht mir das lesen von ihnen einige Probleme. Und zwar, will ich Daten von der (gefüllten!) Binärdatei lesen, allerdings bekomme ich immer wieder einen Speicherfehler wie : "Die Anweisung xxx verweist auf Speicher in xxx . Der Vorgang "written" konnte nicht durchgeführt werden". Danach stürzt das Programm ab.

Danke schonmal für jede Hilfe

Zuerst hier die Structs:

C++:

struct spielsatz{
    int nr;
    char titel[50];
    char autor[50];
    char inhalt[500];
};

struct struct_info{
    int cbp;
    void *key;
};

struct baum {

    baum *links;
    spielsatz spiel;
    struct_info info;
    baum *rechts;
};

  


Und hier der code wo der Fehler auftritt:


C++:
    FILE *fp;
    baum *buffer;


    if(!(fp=fopen("spiele.bin","rb")))//abfrage ob datei fehlerfrei geöffnet wurde
    {
        printf("Fehler beim Oeffnen der Datei!\n");
        exit(0);
    }


int rc;
/* HIER PASSIERT DER FEHLER */
    rc=fread(&buffer->spiel, sizeof(spielsatz),1,fp); //1. satz wird gelesen    

    if (wahl==1) //falls indexwechsel auf nummer
    {
        game->info.key=game->spiel.nr; //index wird gesetzt
        while(rc!=EOF)//neuer baum wird aufgebaut solange die datei nicht am ende ist
        {
        einfuegen(&buffer, game->info.key, sizeof(spielsatz), cmp);
        rc=fread(&buffer->spiel, sizeof(spielsatz),1,fp);//nächster Satz wird gelesen

        }
    }




Wenn ich noch weitere Probleme mit meinem Programm habe, soll ich dann einen neuen Thread machen oder in diesen vorhandenen reinschreiben?

mfG

Vriza
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.01.2004, 20:18 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


naja laut deinem code ist ja buffer nur ein pointer...
da ist dann noch kein speicher allokiert das musst du dann von hand mit malloc machen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.01.2004, 20:21 Uhr
0xdeadbeef
Gott
(Operator)


Probiers mal mit

C++:
baum buffer;


und später &buffer.spiel oder alternativ:

C++:
baum *buffer = malloc(sizeof(baum));
/* restlicher Code */
free(buffer); /* am Ende wieder freigeben. */


Neue Probleme, neue Threads würde ich sagen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 20.01.2004 um 20:22 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.01.2004, 20:23 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Neue Probleme, neue Threads würde ich sagen


äh...ich steh gerade auf der Leitung... Wie meinst du das?
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.01.2004, 20:24 Uhr
0xdeadbeef
Gott
(Operator)



Zitat:
Vriza postete
Wenn ich noch weitere Probleme mit meinem Programm habe, soll ich dann einen neuen Thread machen oder in diesen vorhandenen reinschreiben?


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.01.2004, 20:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
Wer lesen kann ist klar im Vorteil...
Danke
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.01.2004, 20:34 Uhr
Vriza




Zitat:
0xdeadbeef postete
Probiers mal mit

C++:
baum buffer;


und später &buffer.spiel oder alternativ:




Wenn ich es so mache bekomme ich folgenden Fehler:

DProgramme\Microsoft Visual Studio\MyProjects\Spieleverwaltung\funktionen.cpp(79) : error C2664: 'einfuegen' : Konvertierung des Parameters 1 von 'struct baum *' in 'struct baum ** ' nicht moeglich

Und zwar beim Aufruf von der Einfuegen-Funktion:

C++:
while(rc!=EOF)//neuer baum wird aufgebaut solange die datei nicht am ende ist
        {
        einfuegen(&buffer, game->info.key, sizeof(spielsatz), cmp);
        rc=fread(&buffer.spiel, sizeof(spielsatz),1,fp);//nächster Satz wird gelesen

        }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.01.2004, 20:39 Uhr
0xdeadbeef
Gott
(Operator)


Was macht denn einfuegen?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
20.01.2004, 20:42 Uhr
Vriza




Zitat:
0xdeadbeef postete
Was macht denn einfuegen?


Achso, hätt den Prototypen angeben sollen ...

void einfuegen(baum **root, void *key, int dim , int (*fkt)(const void *p1, const void *p2));

Die Funktion fügt ein neues Spiel in einen Binärbaum ein.

void * key ist das Element wonach der Baum geordnet ist, und die funktion fkt vergleicht key und die vorhanden Werte im Baum, um festzustellen wohin das Elemnt im Baum kommt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
20.01.2004, 21:17 Uhr
0xdeadbeef
Gott
(Operator)


Warum erwartet einfuegen einen baum**? Ich sehe den Sinn darin nicht wirklich.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: