Bird
Raised Fist0
Cprogramming~10 mins

malloc function - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - malloc function
Call malloc(size)
↓
Check if memory available
↓
Return pointer
↓
Use allocated memory
↓
Free memory when done
The malloc function requests memory from the system. If available, it returns a pointer to the memory; otherwise, it returns NULL.
Execution Sample
C
#include <stdlib.h>

int *p = malloc(sizeof(int));
if (p != NULL) {
  *p = 10;
  free(p);
}
This code allocates memory for one int, stores 10 in it, then frees the memory.
Execution Table
StepActionEvaluationResult
1Call malloc(sizeof(int))Request memory for 4 bytes (typical int size)Pointer p assigned to allocated memory address (e.g., 0x1000)
2Check if p != NULLPointer is valid (not NULL)Condition true, proceed
3Assign *p = 10Store value 10 at memory address pMemory at p now holds 10
4Call free(p)Release allocated memory back to systemMemory freed, p becomes dangling pointer
5EndProgram ends or continuesMemory properly managed
💡 malloc returns NULL if memory is unavailable; here allocation succeeds.
Variable Tracker
VariableStartAfter Step 1After Step 3After Step 4
puninitialized0x1000 (allocated address)0x1000 (points to int with value 10)0x1000 (dangling pointer, memory freed)
Key Moments - 3 Insights
Why do we check if malloc returned NULL?
Because malloc returns NULL if it cannot allocate memory. Checking prevents using invalid memory, as shown in step 2 of the execution_table.
What happens if we forget to call free?
The allocated memory stays reserved and is not returned to the system, causing a memory leak. Step 4 shows freeing memory to avoid this.
Is the pointer p still valid after free?
No, after free(p), p points to freed memory and should not be used. This is shown in step 4 where p becomes a dangling pointer.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of pointer p after step 1?
AAn allocated memory address like 0x1000
BNULL
CValue 10
DUndefined
💡 Hint
Check the 'Result' column in step 1 of the execution_table.
At which step does the program store the value 10 in allocated memory?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the 'Action' and 'Result' columns in the execution_table.
If malloc fails and returns NULL, which step would change in the execution_table?
AStep 3 would assign 10 to *p
BStep 1 would assign NULL to p
CStep 4 would free memory
DStep 2 condition would be true
💡 Hint
Refer to step 1 and step 2 in the execution_table about malloc return values.
Concept Snapshot
malloc(size) requests memory from the system.
Returns pointer to allocated memory or NULL if unavailable.
Always check if pointer is NULL before use.
Use free(pointer) to release memory when done.
Avoid using pointer after free (dangling pointer).
Full Transcript
The malloc function in C asks the system for a block of memory of a given size. If the system has enough memory, malloc returns a pointer to that memory. If not, it returns NULL. It is important to check if the pointer is NULL before using it to avoid errors. After using the allocated memory, you must call free to give the memory back to the system. Using the pointer after freeing it is unsafe because it points to memory that is no longer yours. This example shows allocating memory for an int, storing 10 in it, and then freeing it properly.

Practice

(1/5)
1. What does the malloc function do in C programming?
easy
A. Declares a variable
B. Frees previously allocated memory
C. Allocates a block of memory dynamically during program execution
D. Prints output to the screen

Solution

  1. Step 1: Understand the purpose of malloc

    The malloc function is used to allocate memory dynamically while the program is running, not at compile time.
  2. Step 2: Differentiate malloc from other functions

    Unlike free which releases memory, or printf which outputs text, malloc only allocates memory.
  3. Final Answer:

    Allocates a block of memory dynamically during program execution -> Option C
  4. Quick Check:

    malloc = allocate memory [OK]
Hint: malloc is for getting memory, free is for releasing it [OK]
Common Mistakes:
  • Confusing malloc with free
  • Thinking malloc prints output
  • Assuming malloc declares variables
2. Which of the following is the correct syntax to allocate memory for 10 integers using malloc?
easy
A. int *ptr = malloc(10 * sizeof(int));
B. int *ptr = malloc(10);
C. int ptr = malloc(10 * sizeof(int));
D. int *ptr = malloc(sizeof(int));

Solution

  1. Step 1: Calculate correct size for allocation

    To allocate memory for 10 integers, multiply 10 by the size of an integer using sizeof(int).
  2. Step 2: Use correct pointer type and syntax

    The pointer must be declared as int * and assigned the result of malloc. int *ptr = malloc(10 * sizeof(int)); correctly does this.
  3. Final Answer:

    int *ptr = malloc(10 * sizeof(int)); -> Option A
  4. Quick Check:

    malloc size = count * sizeof(type) [OK]
Hint: Multiply count by sizeof(type) for malloc size [OK]
Common Mistakes:
  • Not multiplying by sizeof(int)
  • Using wrong pointer type
  • Allocating too little memory
3. What will be the output of the following code?
int *p = malloc(4 * sizeof(int));
if (p == NULL) {
    printf("Allocation failed\n");
} else {
    p[0] = 10;
    p[1] = 20;
    printf("%d %d\n", p[0], p[1]);
}
free(p);
medium
A. Compilation error
B. Allocation failed
C. 0 0
D. 10 20

Solution

  1. Step 1: Check if malloc succeeded

    The code checks if p is NULL. If not NULL, allocation succeeded and memory can be used.
  2. Step 2: Assign and print values

    Values 10 and 20 are assigned to p[0] and p[1]. Then they are printed, so output is "10 20".
  3. Final Answer:

    10 20 -> Option D
  4. Quick Check:

    malloc success prints assigned values [OK]
Hint: Check for NULL before using malloc memory [OK]
Common Mistakes:
  • Ignoring NULL check
  • Printing uninitialized memory
  • Forgetting to free memory
4. Identify the error in this code snippet:
char *str = malloc(5);
strcpy(str, "Hello World");
printf("%s", str);
free(str);
medium
A. strcpy is not allowed with malloc
B. malloc size is too small for the string
C. free should be called before strcpy
D. printf format specifier is wrong

Solution

  1. Step 1: Check allocated memory size

    The string "Hello World" needs 12 bytes (11 chars + 1 for '\0'), but only 5 bytes are allocated.
  2. Step 2: Understand consequences of small allocation

    Copying a larger string into smaller allocated memory causes buffer overflow and undefined behavior.
  3. Final Answer:

    malloc size is too small for the string -> Option B
  4. Quick Check:

    Allocate enough memory for string + '\0' [OK]
Hint: Allocate string length + 1 for null terminator [OK]
Common Mistakes:
  • Allocating less memory than string length
  • Calling free before using memory
  • Wrong printf format for strings
5. You want to create a dynamic array of integers that doubles its size when full. Which approach correctly uses malloc and realloc to achieve this?
hard
A. Start with malloc for initial size, then use realloc to double size when needed
B. Use malloc once with maximum size needed upfront
C. Use realloc first, then malloc to allocate memory
D. Use malloc repeatedly without freeing old memory

Solution

  1. Step 1: Allocate initial memory with malloc

    Start by allocating memory for the initial array size using malloc.
  2. Step 2: Use realloc to resize when array is full

    When the array is full, use realloc to double the memory size safely without losing data.
  3. Step 3: Avoid incorrect usage

    Using malloc repeatedly without freeing old memory causes leaks, allocating maximum size upfront wastes memory, and using realloc before malloc is incorrect.
  4. Final Answer:

    Start with malloc for initial size, then use realloc to double size when needed -> Option A
  5. Quick Check:

    malloc first, then realloc to grow [OK]
Hint: malloc once, then realloc to grow array safely [OK]
Common Mistakes:
  • Calling realloc before malloc
  • Allocating max size upfront wasting memory
  • Not freeing old memory causing leaks
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