C++ Unterschied: new <-> malloc

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.422
Hallo

Wo ist der Unterschied in folgenden zwei Zeilen:
Code:
name = (char*) malloc(strlen(oldname) + 1);
name = new char(strlen(oldname) + 1);
name ist als char Pointer (char *name) deklariert.

Nach meinem Wissen geben malloc und new in diesem Beispiel ein Adresse aus dem heap zurück.
Wenn ich mir beide Möglichkeiten mit dem Debugger anschaue, geben sogar beide die gleiche Adresse zurück (0x805cf68).
Bei der Variante mit new kommt es aber viel später im Programm zu einem SIGABRT Fehler, wenn ein String (std::string) einen Wert vom Typ char Pointer (nicht name) übergeben bekommt.

Wo genau ist der technische Unterschied in diesem Beispiel zwischen new und malloc?
Es ist bekannt, dass new automatisch den Konstruktor der Klasse aufruft. Aber hat "char" einen Konstruktor?

Falls wichtig: Es wird gcc bzw. g++ 4.6.1 mit -m32 auf einem 64 Bit System benutzt. (Linux)

Danke
 
Also wenn du die zweite Zeile so formulierst liefert sie einen Zeiger auf EIN zeichen zurück, das den Zahlenwert von strlen(oldname)+1 hat. Ich denke du hast die runden mit den eckigen Klammern verwechselt. ;-)

Also so wäre es wohl korrekt:
Code:
name = new char[strlen(oldname) + 1];
 
meine ersten Tests zeigen, dass du "leider" rechts hattest :-(

So ein doof Fehler.
Dies zeigt, dass man wegen Fehlern in Lehrbüchern viel Zeit verlieren kann.

Des Weiteren beweist dies/du:
ComputerBase Forum rockt *g*
und
Bücher haben Fehler - das Internet nicht *g*
 
Da du noch nach Unterschieden gefragt hast - bei malloc benutzt du free zum Freigeben. bei new entsprechend delete. Und bei new [] wiederum delete []. Das ist auch nicht vertauschbar.
 
Zurück
Oben