A memory leak happens when a program keeps using memory but never gives it back. This can make the program slow or crash.
Memory leak concept in C++
int* ptr = new int[10]; // use ptr // forgot to delete[] ptr;
new allocates memory on the heap.
If you don't use delete or delete[] to free it, memory leaks happen.
int* ptr = new int; *ptr = 5; // forgot to delete ptr;
int* arr = new int[5]; // use arr delete[] arr;
This program creates an array of 3 integers but never frees the memory. It prints the values correctly but leaks memory.
#include <iostream> int main() { int* leak = new int[3]; leak[0] = 1; leak[1] = 2; leak[2] = 3; std::cout << "Values: " << leak[0] << ", " << leak[1] << ", " << leak[2] << std::endl; // Memory leak here: no delete[] for leak return 0; }
Always match each new with a delete and each new[] with a delete[].
Using smart pointers like std::unique_ptr can help avoid leaks automatically.
Memory leaks may not crash your program immediately but can cause problems over time.
Memory leaks happen when allocated memory is not freed.
They make programs use more memory and can cause slowdowns or crashes.
Always free memory you allocate with new or use smart pointers.
Practice
What is a memory leak in C++?
Solution
Step 1: Understand memory allocation
Memory allocated withnewmust be freed withdelete.Step 2: Define memory leak
If memory is allocated but not freed, it stays reserved and causes a leak.Final Answer:
When allocated memory is not released back to the system -> Option CQuick Check:
Memory leak = not freeing allocated memory [OK]
- Confusing memory leak with slow program
- Thinking unused variables cause leaks
- Mixing memory leak with logical errors
Which of the following C++ code snippets correctly frees allocated memory?
int* ptr = new int(5); // What should be done next?
Solution
Step 1: Identify allocation method
Memory is allocated withnew, so it must be freed withdelete.Step 2: Match correct freeing syntax
free()is formalloc(), notnew. Setting pointer to nullptr does not free memory.Final Answer:
delete ptr; -> Option BQuick Check:
Use delete for new, free for malloc [OK]
- Using free() with new
- Just setting pointer to nullptr without delete
- Allocating new memory without deleting old
What is the output of this C++ code?
int* ptr = new int(10); ptr = new int(20); std::cout << *ptr << std::endl;
Solution
Step 1: Analyze pointer reassignment
First, ptr points to 10. Then ptr is reassigned to new int(20) without deleting old memory.Step 2: Determine output
Pointer now points to 20, so output is 20. The old memory is leaked but does not affect output.Final Answer:
20 -> Option DQuick Check:
Pointer points to last new value = 20 [OK]
- Expecting output 10 after reassignment
- Thinking code causes compile error
- Confusing memory leak with runtime error
Find the memory leak in this code and fix it:
void func() {
int* arr = new int[5];
arr = new int[10];
delete[] arr;
}Solution
Step 1: Identify memory allocations
First, arr points to array of 5 ints, then reassigned to array of 10 ints without deleting first.Step 2: Fix memory leak
Delete the first array before reassigning arr to avoid leak. Usedelete[]for arrays.Final Answer:
Delete first array before reassigning arr -> Option AQuick Check:
Delete old array before new assignment [OK]
- Not deleting first allocated array
- Using delete instead of delete[] for arrays
- Ignoring memory leak warnings
You have a class that allocates memory in its constructor using new. Which approach best prevents memory leaks?
Solution
Step 1: Understand manual memory management risks
Manually calling delete and following Rule of Three is error-prone and can cause leaks if forgotten.Step 2: Use smart pointers for safety
Smart pointers automatically free memory when no longer used, preventing leaks safely and easily.Final Answer:
Use smart pointers like std::unique_ptr to manage memory automatically -> Option AQuick Check:
Smart pointers prevent leaks automatically [OK]
- Relying only on manual delete
- Avoiding new but not managing memory
- Mixing malloc/free with new/delete
Ready to prove it?
Pass the test and this pattern moves unknown
