Est la fonction malloc() initialisation du tableau alloué à zéro?

Voici le code que j'utilise:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr;
    int sz = 100000;
    arr = (int *)malloc(sz * sizeof(int));

    int i;
    for (i = 0; i < sz; ++i) {
        if (arr[i] != 0) {
            printf("OK\n");
            break;
        }
    }

    free(arr);
    return 0;
}

Le programme n'a pas l'impression OK. malloc n'est pas censé pour initialiser la mémoire allouée à zéro. Pourquoi est-ce arrivé?

Le contenu de la mémoire est durée indéterminée. être apparemment aléatoire. Ou tous les zéros. Il vous suffit de ne pas savoir à l'avance.
"Le programme n'a pas l'impression OK. malloc n'est pas censé pour initialiser la mémoire allouée à zéro. " - C'est pas supposée garantir la n'est pas tous nuls. De toute façon, par la lecture de valeurs de durée indéterminée, votre programme a un comportement indéfini. Vous ne pouvez pas attendre quoi que ce soit.
Aussi, debug-construit peut causer de l'allouer de la mémoire, ou encore des variables locales, initialisé. Pour faire de la mémoire et des problèmes avec le pointeur de plus facile à détecter.
Si un type a des valeurs de recouvrement n'est pas défini par la norme. Et si un piège valeur est de lire le comportement n'est pas défini explicitement. Je crois donc c'est UB tout autour.
Vous avez probablement un point là.

OriginalL'auteur devil0150 | 2017-07-26