#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 malloc
ed 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);
?
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.)