In C++, dynamic memory allocation is a way to allocate memory during the execution of a program. Unlike static memory allocation where memory is allocated at compile-time, dynamic memory allocation allows for the allocation and deallocation of memory at runtime.
Dynamic memory allocation is beneficial when you need memory whose size can change during the execution of a program. It’s especially useful when you don’t know the size of data structures at compile time, or when you need to allocate memory for large arrays or objects.
In C, dynamic memory allocation is done using malloc()
, calloc()
, realloc()
, and free()
functions from <stdlib.h>
. These functions allocate and deallocate memory, but they lack the ability to initialize objects or call constructors and destructors for objects. C++ improves upon this by introducing the new
and delete
operators.
In C++, dynamic memory allocation is performed using two operators: new
and delete
.
new
: The new
operator is used to allocate memory for a single object or an array of objects. It returns a pointer to the allocated memory.
delete
: The delete
operator is used to deallocate memory allocated by new
. It releases the memory back to the system.
// Dynamic memory allocation for a single object
int* ptr = new int;
*ptr = 10;
// Dynamic memory allocation for an array
int* arr = new int[5];
for (int i = 0; i < 5; ++i) {
arr[i] = i;
}
// Deallocating memory
delete ptr;
delete[] arr;
One advantage of new
over malloc()
is that new
not only allocates memory but also initializes the object by calling its constructor. This is particularly useful for objects of classes that require initialization.
new Type
where Type
is the type of the object.new Type[size]
where Type
is the type of the elements and size
is the number of elements in the array.It’s essential to handle memory allocation failures. If new
fails to allocate memory, it throws a std::bad_alloc
exception. Therefore, it’s crucial to wrap dynamic memory allocation in a try-catch block to handle such exceptions gracefully.
It’s essential to handle memory allocation failures. If new
fails to allocate memory, it throws a std::bad_alloc
exception. Therefore, it’s crucial to wrap dynamic memory allocation in a try-catch block to handle such exceptions gracefully.
#include
int main() {
int staticArray[5]; // Static allocation of an array of size 5
for (int i = 0; i < 5; ++i) {
staticArray[i] = i; // Assigning values to the elements of the array
}
std::cout << "Static Array elements: ";
for (int i = 0; i < 5; ++i) {
std::cout << staticArray[i] << " "; // Printing elements of the array
}
return 0;
}
// output //
Static Array elements: 0 1 2 3 4
In this example, we’re statically allocating an array of integers with a size of 5. The memory for this array is allocated at compile time, and it remains fixed throughout the program’s execution. We cannot change the size of this array during runtime.
#include
int main() {
int *dynamicArray;
int size;
std::cout << "Enter the size of the dynamic array: ";
std::cin >> size;
dynamicArray = new int[size]; // Dynamic allocation of an array of size 'size'
for (int i = 0; i < size; ++i) {
dynamicArray[i] = i; // Assigning values to the elements of the array
}
std::cout << "Dynamic Array elements: ";
for (int i = 0; i < size; ++i) {
std::cout << dynamicArray[i] << " "; // Printing elements of the array
}
delete[] dynamicArray; // Deallocating the dynamically allocated memory
return 0;
}
// output //
Enter the size of the dynamic array: 5
Dynamic Array elements: 0 1 2 3 4
In this example, we’re dynamically allocating an array of integers based on user input. The memory for this array is allocated at runtime using the new
operator. This allows us to determine the size of the array during program execution. After using the dynamically allocated memory, we must deallocate it using the delete[]
operator to prevent memory leaks.
Dynamic memory allocation requires explicit allocation and deallocation using new
and delete
operators, while static memory allocation does not require explicit deallocation.
Dynamic memory allocation in C++ provides flexibility and efficiency in managing memory during program execution. It allows for the allocation and deallocation of memory as needed, facilitating the creation of dynamic data structures and efficient memory usage. However, it's essential to handle memory allocation failures to prevent program crashes and memory leaks.Happy coding !❤️