📖 Scenario: You are managing a list of daily temperatures stored in a dynamic array in C. Sometimes, you need to add more days to the list, so you must resize the array safely.
🎯 Goal: Learn how to use the realloc function to resize a dynamic array in C while preserving existing data.
📋 What You'll Learn
Create a dynamic array of integers with initial size 3
Create a variable new_size to hold the new size of the array
Use realloc to resize the array to new_size
Print all elements of the resized array
💡 Why This Matters
🌍 Real World
Dynamic arrays are useful when you don't know the exact amount of data in advance, like reading sensor data or user input.
💼 Career
Understanding memory management and resizing arrays is important for systems programming, embedded development, and performance-critical applications.
Progress0 / 4 steps
1
Create the initial dynamic array
Write code to create a dynamic array called temps of integers with initial size 3 using malloc. Initialize the array with values 20, 22, and 19.
C
Hint
Use malloc to allocate memory for 3 integers and assign it to temps. Then assign values to each index.
2
Create a new size variable
Add a variable called new_size and set it to 5 to represent the new size of the array.
C
Hint
Declare an integer variable new_size and assign it the value 5.
3
Resize the array using realloc
Use realloc to resize the temps array to new_size. Assign the result back to temps. Then initialize the new elements temps[3] and temps[4] with values 21 and 23.
C
Hint
Use temps = realloc(temps, new_size * sizeof(int)) to resize. Then assign values to the new indexes.
4
Print all elements of the resized array
Use a for loop with variable i from 0 to new_size - 1 to print each element of temps on its own line. Then free the allocated memory.
C
Hint
Use a for loop to print each element with printf. Don't forget to call free(temps) at the end.
Practice
(1/5)
1. What does the realloc function do in C programming?
easy
A. It allocates a new memory block without preserving old data.
B. It frees the allocated memory block immediately.
C. It changes the size of a previously allocated memory block, preserving its content.
D. It copies data from one memory block to another.
Solution
Step 1: Understand the purpose of realloc
The realloc function is used to resize an existing memory block allocated by malloc or calloc.
Step 2: Check data preservation behavior
realloc preserves the existing data up to the minimum of old and new sizes.
Final Answer:
It changes the size of a previously allocated memory block, preserving its content. -> Option C
Quick Check:
realloc resizes memory and keeps data [OK]
Hint: Remember: realloc resizes and keeps old data safe [OK]
Common Mistakes:
Thinking realloc frees memory without resizing
Assuming realloc always allocates new memory without preserving data
Confusing realloc with memcpy or free
2. Which of the following is the correct syntax to resize a memory block pointed by ptr to hold 50 integers using realloc?
easy
A. ptr = realloc(ptr, 50 * sizeof(int));
B. ptr = realloc(sizeof(int), 50 * ptr);
C. ptr = realloc(50, ptr * sizeof(int));
D. ptr = realloc(ptr, 50);
Solution
Step 1: Understand realloc parameters
realloc takes a pointer and the new size in bytes. To hold 50 integers, size must be 50 times size of int.
Step 2: Check each option's correctness
ptr = realloc(ptr, 50 * sizeof(int)); correctly multiplies 50 by sizeof(int). Others misuse parameters or sizes.
Final Answer:
ptr = realloc(ptr, 50 * sizeof(int)); -> Option A
Quick Check:
Size in bytes = count * sizeof(type) [OK]
Hint: Multiply count by sizeof(type) for realloc size [OK]
A. Calling free(ptr) after ptr is NULL does not free the original memory block.
B. Missing check for malloc failure before realloc.
C. Incorrect size calculation in realloc.
D. No error; code is correct.
Solution
Step 1: Understand realloc return and NULL check
If realloc returns NULL, original pointer is lost if not saved separately, and ptr becomes NULL.
Step 2: Analyze free(ptr) after NULL assignment
Calling free(ptr) after ptr is NULL does not free the original memory block, leading to memory leak.
Final Answer:
Calling free(ptr) after ptr is NULL does not free the original memory block. -> Option A
Quick Check:
Check realloc result before overwriting pointer [OK]
Hint: Save realloc result before overwriting pointer [OK]
Common Mistakes:
Not checking realloc return before assignment
Freeing NULL pointer thinking it frees old memory
Ignoring malloc failure before realloc
5. You have a dynamic array of integers allocated with malloc. You want to safely double its size using realloc without losing data or causing memory leaks. Which approach is correct?
hard
A. ptr = malloc(2 * current_size); memcpy(ptr, old_ptr, current_size); free(old_ptr);
B. ptr = realloc(ptr, 2 * current_size); // directly assign realloc result
C. free(ptr); ptr = malloc(2 * current_size); // allocate new memory after freeing
D. int *temp = realloc(ptr, 2 * current_size); if (temp) ptr = temp; else handle error;
Solution
Step 1: Understand safe realloc usage
Directly assigning realloc result to original pointer risks losing original memory if realloc fails.
Step 2: Use temporary pointer to check realloc success
Assign realloc to temp pointer, check if not NULL, then update original pointer. Else handle error safely.
Final Answer:
int *temp = realloc(ptr, 2 * current_size); if (temp) ptr = temp; else handle error; -> Option D
Quick Check:
Use temp pointer to avoid memory leaks on realloc failure [OK]
Hint: Use temp pointer for realloc to avoid losing original memory [OK]
Common Mistakes:
Overwriting pointer before checking realloc result
Freeing pointer before realloc causing data loss
Not handling realloc failure properly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.