C ++ new * char ist nicht leer

7

Ich hatte eine Frage.

Ich entwickle Server in ASIO und Pakete sind in spitzen Char.

Wenn ich ein neues Zeichen erzeuge (zB char * buffer = new char[128]; ) muss ich es manuell auf Null setzen.

Von:

%Vor%

Ich mache etwas falsch, das Char ist nicht klar?

    
Kacper Fałat 01.06.2013, 11:18
quelle

5 Antworten

19

Sie müssen kein Array nicht initialisierter Werte durchlaufen. Sie können ein Array von Nullen wie folgt dynamisch instantiieren:

%Vor%     
juanchopanza 01.06.2013, 11:22
quelle
11

Es gibt zwei Möglichkeiten, den neuen Operator in C ++ aufzurufen - standardmäßig initialisiert und null initialisiert.

Zur Standardinitialisierung (bei der der Wert nicht definiert ist) rufen Sie

auf %Vor%

Es ist dann undefined behavoir, diesen Wert zu lesen oder zu verwenden, bis er gesetzt wurde.

Um auf Null zu initialisieren (was auf 0 gesetzt wird), benutzen Sie:

%Vor%

Dies funktioniert auch mit Arrays:

%Vor%

Es gibt weitere Informationen hier

    
Mike Vine 01.06.2013 11:26
quelle
3

Zugewiesener Speicher ist nicht klar, er enthält stattdessen zufällige Daten. So funktioniert die Speicherzuweisung. Sie müssen entweder for -loop ausführen oder memset verwenden, um es manuell zu löschen.

    
kirelagin 01.06.2013 11:19
quelle
2

Sie können auch Calloc verwenden. Es initialisiert jedes Element automatisch auf 0. z.B.:

%Vor%

Erster Parameter ist die Anzahl der zuzuweisenden Blöcke. Zweitens ist die Größe des Blocks. Diese Funktion gibt void * zurück, also müssen Sie ihren Wert in (char *) umwandeln Wenn Sie Calloc (oder malloc oder irgendwelche "reinen c" Zuordnungsfunktionen) verwenden, sollten Sie besser free Funktion zum Freigeben von Speicher statt Löschen.

    
user2422869 01.06.2013 11:38
quelle
-5

Da es ein Zeiger ist, müssen Sie es so machen:

%Vor%     
user2308896 01.06.2013 11:21
quelle

Tags und Links