If I have a c program, like:
SomeTypePtr my_type;
my_type = malloc(sizeof(someType));
/* do stuff */
free(my_type);
/* do a bunch of more stuff */
free(my_type);
Does the calling of 'free' for my_type do any harm? After I call free(my_type), does the pointer become a null pointer once again?
That means it directly access the hidden parts of the memory block and assumes that the linked list pointers there are valid. If you free a block twice then you might have the problem that someone did a new malloc , got the memory you just freed, overwrites it and the second free reads invalid pointers from it.
The function free takes a pointer as parameter and deallocates the memory region pointed to by that pointer. The memory region passed to free must be previously allocated with calloc , malloc or realloc . If the pointer is NULL , no action is taken.
It merely allocates new space and returns a pointer to it. Then that new pointer is assigned to newPtr , which erases the old value that was in newPtr .
The error of double free or corruption in C++ means that our program somehow invokes the free() C++ object with an illegal pointer variable. When we use smart pointers such as shared_ptr, we must check because if we call the function get(), we are directly using the raw pointer.
Deallocating a memory area with free
does not make the contents of the pointer NULL. Suppose that you have int *a = malloc (sizeof (int))
and a
has 0xdeadbeef
and you execute free (a)
then after execution a
still contains 0xdeadbeef
but after the free
call this memory address is no more reserved for you. Something like you have rented a flat with malloc
used for some time, returned the flat by free
then you might have a duplicate key for the flat, but it is not reserved for you.
Doing a free
on an already free
d memory will result in double free memory corruption.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With