Bird
Raised Fist0
Cprogramming~5 mins

free function - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the free function in C?
The free function releases memory that was previously allocated with malloc, calloc, or realloc. It helps prevent memory leaks by returning the memory back to the system.
Click to reveal answer
intermediate
What happens if you call free on a pointer that was not allocated dynamically?
Calling free on a pointer not allocated by malloc or similar functions causes undefined behavior. This can crash the program or corrupt memory.
Click to reveal answer
intermediate
Can you use free more than once on the same pointer without reassigning it?
No. Using free multiple times on the same pointer without resetting it to NULL leads to undefined behavior, often causing crashes or memory corruption.
Click to reveal answer
beginner
Show a simple example of allocating and freeing memory for an integer in C.
Example:
int *p = malloc(sizeof(int));
if (p != NULL) {
  *p = 10;
  free(p);
}

This allocates memory for one integer, assigns 10, then frees the memory.
Click to reveal answer
intermediate
Why is it important to set a pointer to NULL after calling free?
Setting a pointer to NULL after free avoids accidental use of a pointer that points to freed memory, which can cause bugs or crashes.
Click to reveal answer
What does the free function do in C?
AAllocates new memory
BCopies memory from one location to another
CReleases dynamically allocated memory back to the system
DInitializes a pointer to NULL
What happens if you call free on a pointer twice without resetting it?
AUndefined behavior, possible crash
BNothing, it is safe
CMemory is allocated again
DPointer automatically resets to NULL
Which pointer should you pass to free?
APointer to a local variable
BPointer returned by <code>malloc</code>, <code>calloc</code>, or <code>realloc</code>
CPointer to a string literal
DPointer to a global variable
What is a good practice after calling free on a pointer?
ASet the pointer to NULL
BUse the pointer immediately
CCall <code>free</code> again on the same pointer
DAssign the pointer to another variable
If malloc fails and returns NULL, what happens if you call free on that NULL pointer?
AProgram crashes
BUndefined behavior
CMemory is allocated
DNothing happens, safe to call
Explain how the free function works and why it is important in C programming.
Think about memory management and what happens if you don't free memory.
You got /4 concepts.
    Describe common mistakes when using free and how to avoid them.
    Consider what can cause crashes or bugs related to freeing memory.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of the free function in C?
      easy
      A. To initialize a pointer to NULL
      B. To allocate new memory dynamically
      C. To copy data from one memory location to another
      D. To release memory previously allocated by malloc or similar functions

      Solution

      1. Step 1: Understand what free does

        The free function releases memory that was allocated dynamically, returning it to the system.
      2. Step 2: Differentiate from other memory functions

        malloc allocates memory, free releases it. Copying or initializing pointers is unrelated.
      3. Final Answer:

        To release memory previously allocated by malloc or similar functions -> Option D
      4. Quick Check:

        free releases memory = A [OK]
      Hint: Remember: free returns memory, malloc gets memory [OK]
      Common Mistakes:
      • Confusing free with malloc or calloc
      • Thinking free allocates memory
      • Using free to copy data
      2. Which of the following is the correct way to free memory allocated by malloc?
      easy
      A. free(pointer); pointer = NULL;
      B. free(pointer); free(pointer);
      C. free(pointer); pointer++;
      D. free(pointer); pointer = malloc(10);

      Solution

      1. Step 1: Free the allocated memory

        Calling free(pointer); releases the memory correctly.
      2. Step 2: Avoid dangling pointer

        Setting pointer = NULL; after freeing prevents accidental use of freed memory.
      3. Final Answer:

        free(pointer); pointer = NULL; -> Option A
      4. Quick Check:

        Free then NULL pointer = D [OK]
      Hint: Always set pointer to NULL after free to avoid bugs [OK]
      Common Mistakes:
      • Calling free twice on the same pointer
      • Incrementing pointer after free
      • Reassigning pointer without freeing first
      3. What will be the output of this C code?
      char *ptr = malloc(5);
      strcpy(ptr, "test");
      free(ptr);
      printf("%s", ptr);
      medium
      A. test
      B. Undefined behavior (may print garbage or crash)
      C. Compilation error
      D. Empty string

      Solution

      1. Step 1: Analyze memory allocation and free

        Memory is allocated and string "test" copied. Then memory is freed.
      2. Step 2: Using pointer after free

        Printing ptr after free causes undefined behavior; it may print garbage or crash.
      3. Final Answer:

        Undefined behavior (may print garbage or crash) -> Option B
      4. Quick Check:

        Using freed pointer = undefined behavior [OK]
      Hint: Never use pointer after free without reassigning [OK]
      Common Mistakes:
      • Assuming freed pointer still holds valid data
      • Expecting compilation error
      • Thinking it prints empty string
      4. Identify the error in this code snippet:
      int *arr = malloc(3 * sizeof(int));
      free(arr + 1);
      medium
      A. free called on pointer not returned by malloc
      B. Missing free call
      C. Incorrect size in malloc
      D. No error, code is correct

      Solution

      1. Step 1: Understand pointer passed to free

        Memory was allocated at arr, but free is called on arr + 1, which is not the original pointer.
      2. Step 2: Free must be called on original pointer

        Only the pointer returned by malloc (or NULL) can be passed to free safely.
      3. Final Answer:

        free called on pointer not returned by malloc -> Option A
      4. Quick Check:

        Free must use original pointer = A [OK]
      Hint: Free only original malloc pointer, not offset pointers [OK]
      Common Mistakes:
      • Freeing pointer offset from malloc result
      • Not freeing allocated memory
      • Assuming free can take any pointer inside block
      5. You have a function that reallocates memory for an integer array:
      int *resize(int *arr, int new_size) {
          int *temp = realloc(arr, new_size * sizeof(int));
          if (temp == NULL) {
              free(arr);
              return NULL;
          }
          return temp;
      }

      What is the best practice to avoid memory leaks when using this function?
      hard
      A. Always free the original pointer before calling resize
      B. Call free on the returned pointer immediately after resize
      C. Assign the return value to a temporary pointer before updating original pointer
      D. Do not check if realloc returns NULL

      Solution

      1. Step 1: Understand realloc behavior

        If realloc fails, it returns NULL and original memory remains allocated.
      2. Step 2: Use temporary pointer to avoid losing original memory

        Assign realloc result to a temp pointer first; if NULL, free original to avoid leaks.
      3. Final Answer:

        Assign the return value to a temporary pointer before updating original pointer -> Option C
      4. Quick Check:

        Use temp pointer for realloc to prevent leaks = B [OK]
      Hint: Use temp pointer for realloc result before replacing original [OK]
      Common Mistakes:
      • Overwriting original pointer without checking realloc result
      • Freeing original pointer before realloc
      • Ignoring NULL return from realloc
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard