Dois-je appeler memset après que j'ai attribué de nouvelles de la mémoire avec malloc

#include "stdlib.h"
#include "stdio.h"
#include "string.h"
int main(int argc, char* argv[])
{
    int *test = malloc(15 * sizeof(int));
    for(int i = 0;i < 15 ;i  ++ )
        printf("test is %i\n",test[i]);

    memset(test,0,sizeof(int) * 15);

    for(int i = 0 ; i < 15; i ++ )
        printf("test after memset is %i\n",test[i]);

    return 0;
}

La sortie j'obtiens, c'est très bizarre:

    test is 1142126264
    test is 32526
    ...
    test is 1701409394
    test is 1869348978
    test is 1694498930
    test after memset is 0
    test after memset is 0
    test after memset is 0
    test after memset is 0
    test after memset is 0
    ...
    test after memset is 0
    test after memset is 0
    test after memset is 0
    test after memset is 0
    test after memset is 0

Pourquoi c'est arrivé?
J'ai pensé que je viens de malloced quelques nouvelles fraîches de la mémoire qui est prêt à l'emploi?

Alors, comment à ce sujet:

int test[15];

Dois-je appeler
memset(&test,0,sizeof(int) * 15); ?

L'initialisation de tous les bits de la mémoire serait de ralentir les programmes qui n'en ont pas besoin. Je pense que calloc servirait si vous avez besoin il remis à zéro.

OriginalL'auteur steave | 2012-11-16