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);