I read somewhere that it is disastrous to use free to get rid of an object not created by calling malloc, is this true? why?
I read somewhere that it is disastrous to use free to get rid of
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
That’s undefined behavior – never try it.
Let’s see what happens when you try to
free()an automatic variable. The heap manager will have to deduce how to take ownership of the memory block. To do so it will either have to use some separate structure that lists all allocated blocks and that is very slow an rarely used or hope that the necessary data is located near the beginning of the block.The latter is used quite often and here’s how i is supposed to work. When you call malloc() the heap manager allocates a slightly bigger block, stores service data at the beginning and returns an offset pointer. Smth like:
then
free()will try to access that data by offsetting the passed pointer but if the pointer is to an automatic variable whatever data will be located where it expects to find service data. Hence undefined behavior. Many times service data is modified byfree()for heap manager to take ownership of the block – so if the pointer passed is to an automatic variable some unrelated memory will be modified and read from.Implementations may vary but you should never make any specific assumptions. Only call
free()on addresses returned bymalloc()family functions.