Muss ich nach malloc new memory memsen?

8
%Vor%

der output ist sehr wierd was ist:

%Vor%

Warum würde das passieren? Ich dachte, ich habe nur ein paar neue Speicher neu mallortiert, die bereit sind zu verwenden?

Wie wäre es damit:

%Vor%

Muss ich anrufen? memset(&test,0,sizeof(int) * 15); ?

    
steave 16.11.2012, 04:41
quelle

4 Antworten

15

malloc initialisiert den zugewiesenen Speicher nicht. Du bekommst einfach, was auch immer der Müll war. Wenn Sie wirklich alles auf 0 setzen müssen, verwenden Sie calloc bei einer Leistungseinbuße. (Wenn Sie mit etwas anderem als 0 initialisieren müssen, verwenden Sie memset für Bytearrays und andererseits das Array manuell, um es zu initialisieren.)

    
1'' 16.11.2012, 04:46
quelle
1

Wenn Sie einen Speicher von Heap anfordern, wird Heap nur einen verfügbaren Speicherblock zuweisen. Dieser Speicherblock kann abhängig von einem vorherigen Schreibvorgang einige Daten enthalten.

    
Jay 16.11.2012 04:44
quelle
1

C11 7.22.3.4

%Vor%
  

Die malloc-Funktion weist Speicherplatz für ein Objekt zu, dessen Größe ist   spezifiziert durch die Größe und dessen Wert ist unbestimmt.

Wenn Sie möchten, dass die Werte auf Null gesetzt werden, verwenden Sie stattdessen Calloc. Calloc ist im Grunde nur eine Wrapper-Funktion um einen Aufruf von malloc und einen Aufruf von memset.

    
Lundin 16.11.2012 07:38
quelle
0

malloc () übernimmt aus Performance-Gründen keine Gewähr für den Inhalt des neu zugewiesenen Speichers. Es könnte Nullen sein, es könnten zufällige Daten sein, es könnte alles sein. Wenn Sie möchten, dass malloced Speicher einen bestimmten Wert hat, dann liegt es an Ihnen, es zu tun.

    
jdigital 16.11.2012 04:50
quelle

Tags und Links