Problem mit realloc
-
Hi,
Warum schmiert meine Anwendung bei dem realloc (beiden) ab?void CDGraphics::SetDir(const char *Dir) { if (Dir == NULL) { g_Dir = (char*) realloc(g_Dir, 2 * sizeof(char)); g_Dir = "\0"; } else { g_Dir = (char*) realloc(g_Dir, sizeof(*Dir)); strcpy (g_Dir, Dir); } }
Vorher wird noch ein malloc mit der Grösse von 2char aufgerufen und dann "\0" in g_Dir geschrieben.
DANKE
-
g_Dir="\0";
Das setzt nicht den ersten Buchstaben von g_Dir auf 0 sondern der char* g_Dir zeigt jetzt auf eine Zeichenkette bestehend aus 2 \0 zeichen!
schreib es so:
*g_Dir=0;Dann geht es!
realloc stuertzt deswegen ab, weil "\0" kein erlaubter string ist -> realloc erwartet einen NULL-Pointer oder einen pointer der von malloc, calloc oder realloc returned wurde!
-
BTW.
sizeof(char) ist immer 1. Deswegen ist x * sizeof(char) unnötig
-
Original erstellt von kingruedi:
BTW.
sizeof(char) ist immer 1. Deswegen ist x * sizeof(char) unnötigDer Standard definiert die Größe eines chars nicht als absoluten Wert.
-
Was verstehst Du hier unter einem absoluten Wert?
sizeof gibt die Größe eines Objektes in char zurück. Also ist sizeof (char) gleich 1.
-
Ja, aber sagt der C-Standard denn, daß sizeof(char) genau 1 sein muss?
Ich dachte, er würde nur sagen, daß
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)
gelten muss, oder irre ich da?
-
ISO C99: 6.5.3.4: "... When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1. ..."