new, delete bei char



  • hallo,

    warum funktionniert das delete hier nicht?

    //----------------------------------------------
    //variabler Objektname!!!
    //----------------------------------------------
      char *dummy = new char[varBuf];
      //Einlesen, und abspeichern 
      fread( dummy, varBuf, 1, psOVL->fpOVL );
      dummy[varBuf] = '\0'; 
      psOVL->chVersionName = dummy;
      delete [] dummy;
    

    bei delete stuerzt er immer ab



  • na ja um bei C zu bleiben.
    das programm stuerzt auch, wenn ich zuerst dynamisch speicher mit malloc belege, bei abschliessender speicherfreigabe mit delete ab.



  • ok vergesst es am besten das array war zu klein!!



  • petersjo schrieb:

    na ja um bei C zu bleiben.
    das programm stuerzt auch, wenn ich zuerst dynamisch speicher mit malloc belege, bei abschliessender speicherfreigabe mit delete ab.

    ich hoffe, das war nur ein schreibfehler:
    malloc und delete funktioniern zusammen naemlich nicht.



  • http://www.c-plusplus.net/forum/viewtopic.php?t=43070
    ist bei deinem fread() Aufruf nicht noch immer Parameter 2 mit Parameter 3 vertauscht?



  • @shade of mine
    das war in der eile falsch geschrieben, muss natuerlich free(dummy) da stehen!!
    normal mach ich das mit new und delete, das programm soll aber eigentlich c konform sein.

    @descartes
    ich hab da ein verstaendnisproblem, bsp.:
    bei einem char-array
    

    char feld[10];

    hab ich da jetzt ein objekt von 11 bytes, oder hab ich ich 11 objekte je ein byte
    beides wird mit fread ausgelesen.
    weitere frage:
    der
    

    char *Zeiger[cpp] auf das eigelesen array enthaelt 11 character, der string der eingelesenen binaerdatei hat aber keine enderkennung.
    beim debuggen kann ich sehen , dass der string mit 11 zeichen ausgeben wird , dahinter befinden sich aber noch 4 sonderzeichen, obwohl mein feld aber um diese 4 sonderzeichen kleiner ist?
    ist das ein problem?



  • sorry wegen der code-tags,



  • Du hast 10 Elemente, die jeweils 1 Byte (= 1 char) gross sind.

    Natürlich könntest du auch sagen, dass du 1 Element von der Länge 10 Char hast:

    char feld_1[10];
    char feld_2[10];
    
    fread(feld_1, 10 * sizeof(feld_1[0]), 1, filehandle );
    fread(feld_2, 10 * sizeof(feld_2[0]), 1, filehandle );
    

    ...würde ich das so verstehen, dass beim 1ten fread() Befehl ausgehend von Fileposition 0 zehn Zeichen eingelesen werden. Anschliessend wird der Filepointer um "nitems" weitergeschoben (hier: 1 Char) und dann ausgehend von Fileposition 1 erneut 10 Char eingelesen.

    char feld_1[10];
    char feld_2[10];
    
    fread(feld_1, sizeof(feld_1[0]), 10, filehandle );
    fread(feld_2, sizeof(feld_2[0]), 10, filehandle );
    

    Bei diesem Beispiel, würde ich erwarten dass der 1te fread() 10 Char einliest und den Filepointer um "nitems" (hier: 10 Char) weiterschiebt. Anschliessend liest der 2te fread() dann ausgehend von Fileposition 10 die nächsten 10 Char ein.

    Standard C Library Functions                            fread(3C) 
    
    NAME 
         fread, fwrite - buffered binary input/output 
    
    SYNOPSIS 
         #include <stdio.h> 
    
         size_t fread(void *ptr, size_t  size,  size_t  nitems,  FILE *stream);
    

Anmelden zum Antworten