Ist der von malloc (und seinen Cousins) zurückgegebene Memory Chunk auf Null initialisiert?

Ich habe einen Code zum Testen geschrieben, um die Speicherverwaltung von Linux- und Windows-Betriebssystemen zu testen. Nur für weitere Tests ging ich voran und überprüfte, welche Werte in dem von malloc () zurückgegebenen Speicher vorhanden sind.

Die zurückgegebenen Werte sind alle 0 (Null). Ich habe die Manpage von malloc gelesen, sowohl unter Windows als auch unter Linux, aber ich binkann den Grund für dieses Verhalten nicht finden. Laut der Manpage ist das

Die Funktion malloc () weist Größenbytes zu und gibt einen Zeiger auf den zugewiesenen Speicher zurück. Der Speicher wird nicht initialisiert.

Um das Speichersegment zu löschen, muss memset () manuell verwendet werden.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <stdbool.h>

int eat(long total,int chunk){
    long i;
    for(i=0;i<total;i+=chunk){
        short *buffer=malloc(sizeof(char)*chunk);     
        if(buffer==NULL){
            return -1;
        }
        printf("\nDATA=%d",*buffer);
        memset(buffer,0,chunk);
    }
    return 0;
}

int main(int argc, char *argv[]){
    int i,chunk=1024;
    long size=10000;
            printf("Got %ld bytes in chunks of %d...\n",size,chunk);
            if(eat(size,chunk)==0){
                printf("Done, press any key to free the memory\n");
                getchar();
            }else{
                printf("ERROR: Could not allocate the memory");
            }
        }

Vielleicht fehlt mir etwas. Der Code wird von @ angepasHie

BEARBEITEN Das Problem wurde beantwortetHie für die GCC-spezifische Ausgabe. Ich glaube, dass das Windows-Betriebssystem auch die gleichen Schritte ausführen würde.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage