Pointers and Dynamic memory in C++
There are two ways that memory gets allocated for data storage:
- Compile Time (or static) Allocation
- Memory for named variables is allocated by the compiler
- Exact size and type of storage must be known at compile time
- For standard array declarations, this is why the size has to be constant
- Dynamic Memory Allocation
- Memory allocated “on the fly” during run time
- dynamically allocated space usually placed in a program segment known as the heap or the free store
- Exact amount of space or number of items does not have to be known by the compiler in advance.
- For dynamic memory allocation, pointers are crucial.
Creating space using new :
Allocate space dynammically on the heap(free store) . new returns address of the allocated memory.Use pointers to reference the memory allocations on the heap.
new int; // dynamically allocates an int new double; // dynamically allocates a double
new int; // dynamically allocates an array of 40 ints new double[size]; // dynamically allocates an array of size doubles // note that the size can be a variable define at first.
int * p; // declare a pointer p p = new int; // dynamically allocate an int and load address into p
// we can also do these in single line statements int x = 12; int * list = new int[x]; float * numbers = new float[x+52];
int * p = new int; // dynamic integer, pointed to by p *p = 10; // assigns 10 to the dynamic integer cout << *p; // prints 10 Another way to assigning :
list = 12; // bracket notation *(list + 7) = 52; // pointer-offset notation // means same as numList delete : To deallocate memory on the heap.
int * list = new int; // dynamic array delete  list; // deallocates the array list = 0; // reset list to null pointer
garbage : created when we can no longer acccess previously allocated memory on the heap. Dangling Pointer: A pointer that no longer points to something valid on the heap.
Create an entirely new array of the appropriate type and of the new size. (You'll need another pointer for this).
int * temp = new int[size + 5]; Change the pointer. You still want the array to be called "list" (its original name), so change the list pointer to the new address.
list = temp; //you have changed the size of variable name list by pointing this to memory location which have size of (size+5). Hope you learnt something , stay tune for more examples and interesting facts about c++. #keepCoding
Have something to add on Pointers and Dynamic memory ? Please add in comments.
Follow us on Facebook, Google Plus and Twitter to get more Tech News and reviews.