Do I have to call memset after I allocated new memory using malloc

steave picture steave · Nov 16, 2012 · Viewed 34.3k times · Source
#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;
}

The output I get is very weird:

    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

Why would that happen? I thought I just malloced some new fresh memory that is ready to use?

So how about this:

int test[15];

Do I have to call memset(&test,0,sizeof(int) * 15); ?

Answer

1&#39;&#39; picture 1'' · Nov 16, 2012

malloc does not initialize the memory it allocates. You just get whatever random garbage was already in there. If you really need everything set to 0, use calloc at a performance penalty. (If you need to initialize to something other than 0, use memset for byte arrays and otherwise manually loop over the array to initialize it.)