12.5: Freeing Memory

Embedded Controllers Using C and Arduino · LibreTexts

0%

Contents

    Text

    Size
    100%
    Theme
    Typeface
    Line length
    Spacing

    From LibreTexts, under CC BY-NC-SA 4.0, as the source states it; its equations are written in TeX, which the PDF shows typeset. This page at LibreTexts.

    12.5: Freeing Memory

    Once you’re done using memory, you must return it to the free memory pool. If you don’t, no other application (nor the operating system) can use it. The memory will be effectively lost until the system is rebooted. This is known as a memory leak. To return memory that you have no further use for, use free(). Here is the prototype:

    int free( void *p );
    

    p is the pointer that you initially received from either malloc() or calloc(). The return value of the free() function is 0 for success or −1 on error. Normally this function never fails if it is given a valid pointer. If it does fail, there is little that you can do about it (at least not at this level). Remember: Every block that you allocate eventually must be freed! You might wonder why the free() function does not need to know the size of the block to free. This is because along with the memory they pass to you, malloc() and calloc() actually allocate a little bit more for use by the operating system. In this extra memory that you don’t see are stored items such as the size of the block. This saves you a little house keeping work.


    This page titled 12.5: Freeing Memory was last modified on Wed, 08 Sep 2021 02:57:31 GMT and is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform.