Does tmp = malloc(sizeof(x));
the same automatically as tmp = malloc(sizeof(x)); *tmp = x;
?
More specifically, is malloc instantly initialising my variable or is it just allocating memory and I have to initialise it myself?
CodePudding user response:
No.
The memory returned by malloc isn't initialized.
Quoting cppreference,
Allocates size bytes of uninitialized storage.
CodePudding user response:
No. Even if malloc
weren't defined to be uninitialized storage, sizeof(x)
has nothing to do with the runtime value of x
(it's just a friendly way to find the size of a variable's underlying type). There's no runtime use of the value of x
at all in the code you provided.
CodePudding user response:
The operator sizeof
yields the size in bytes of its operand.
That is for example if the identifier x
denotes a name of a variable of the type int
then the expression sizeof( x )
yields the value 4
provided that for objects of the type int
the compiler reserves 4
bytes.
So this call
tmp = malloc(sizeof(x));
will be equivalent to the call
tmp = malloc(sizeof(int));
that in turn is equivalent to
tmp = malloc( 4 );
This statement just tries to allocate dynamically 4
bytes. The allocated memory is uninitialized.
Moreover the expression sizeof( x ) if x
is not a variable length array is evaluated at compile time before the program begins its execution.
You could initialize it with zeroes the following way
tmp = calloc( 1, sizeof( x ) );
CodePudding user response:
No, the function malloc()
simply allocates memory on the heap. It doesn't initialize the pointer.