User Tools

Site Tools


cplusplus:pointers_4_slides

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
cplusplus:pointers_4_slides [2019/03/31 22:24] mithatcplusplus:pointers_4_slides [2021/10/24 03:02] – [''malloc'' and ''free''] mithat
Line 11: Line 11:
 ===== Dynamic memory allocation ===== ===== Dynamic memory allocation =====
   * **Dynamic memory allocation** allows you to reserve blocks of computer memory at //runtime//.   * **Dynamic memory allocation** allows you to reserve blocks of computer memory at //runtime//.
-  * Typically used without associating a variable name with it.+  * Typically used with pointers.
  
 ===== The new operator ===== ===== The new operator =====
-  * ''new <data-type>'' reserves a block of memory to hold the specified %%<data-type>%% and returns the base address of that block:+  * ''new <data-type>'' 
 +    * reserves a block of memory to hold the specified %%<data-type>%% 
 +    * returns the base address of that block
 +    * optional parenthesis around ''<data-type>''
  
 <code cpp> <code cpp>
Line 23: Line 26:
 </code> </code>
  
-  * ''foo'' points to a ''double'' that is //not// a variable.+  * ''foo'' points to a ''double'' that isn't associated with a variable identifier.
  
 ===== Example ===== ===== Example =====
Line 36: Line 39:
     double *myPtr, *yourPtr;     double *myPtr, *yourPtr;
  
-    myPtr = new (double)+    myPtr = new double; 
-    yourPtr = new (double);+    yourPtr = new double;
  
     cout << "Enter a number: ";     cout << "Enter a number: ";
Line 106: Line 109:
 void ninetynine() void ninetynine()
 { {
-    int localVar = 99;+    int localVar = 99;  // localVar is destroyed at end of fcn call
     cout << localVar << endl;     cout << localVar << endl;
 } }
Line 136: Line 139:
 void ninetynine() void ninetynine()
 { {
-    int *localPtr = new int;+    int *localPtr = nullptr;  // localPtr is destroyed at end of fcn call 
 +    localPtr = new int;       // but not dynamically allocated storage
  
     *localPtr = 99;     *localPtr = 99;
Line 178: Line 182:
 ===== Memory leaks ===== ===== Memory leaks =====
  
-  * Memory leaks, no matter how small, are considered bad programming practice. +  * Memory leaks, no matter how small, are bad programming practice. 
-  * They can be fixed by the proper use of **deallocation**:the process of releasing back to the OS storage that was previously dynamically allocated.  +  * Can be fixed by the proper use of **deallocation**: releasing back to the OS storage that was previously dynamically allocated.  
-  * Deallocation of dynamically allocated storage does not happen automatically in C++ +  * **Deallocation of dynamically allocated storage does not happen automatically.** 
-  * You must explicitly (i.e., manually) deallocate the memory.+    * You must explicitly (i.e., manually) deallocate the memory. 
 + 
 +===== The delete operator =====
   * The ''delete'' operator lets you explicitly deallocate memory that has been dynamically allocated.   * The ''delete'' operator lets you explicitly deallocate memory that has been dynamically allocated.
 +
 +<code cpp>
 +int *myPtr = new int;
 +...
 +delete myPtr; // deallocates block pointed to by myPtr.
 +</code>
 +
   * Principle: All dynamically allocated memory must be deallocated somewhere in the program.   * Principle: All dynamically allocated memory must be deallocated somewhere in the program.
-    * "For every ''new'' a ''delete''.+    * "For every ''new'' a ''delete''."
  
 ===== Example ===== ===== Example =====
Line 216: Line 229:
 ===== Deallocating arrays ===== ===== Deallocating arrays =====
  
-To deallocate dynamically allocated arrays, use square brackets: ''delete [] arrayPtr;''+Use square brackets to deallocate dynamically allocated arrays: ''delete [] arrayPtr;''
  
 <file cpp Gaddis-Pr9-14.cpp> <file cpp Gaddis-Pr9-14.cpp>
Line 228: Line 241:
 int main() int main()
 { {
-    double *sales = nullptr, // To dynamically allocate an array +    double *sales = nullptr,    // To dynamically allocate an array 
-    total = 0.0, // Accumulator +    total = 0.0,                // Accumulator 
-    average; // To hold average sales +    average;                    // To hold average sales 
-    int numDays, // To hold the number of days of sales +    int numDays,                // To hold the number of days of sales 
-        count; // Counter variable+        count;                  // Counter variable
  
     // Get the number of days of sales.     // Get the number of days of sales.
Line 275: Line 288:
 ===== heap vs. stack ===== ===== heap vs. stack =====
  
-  * Local variables and dynamically allocated storage come from different pools of RAM.+  * Local variables and dynamically allocated storage come from pools of RAM.
   * **stack**: a pool of memory whose allocation and deallocation is automatically managed.   * **stack**: a pool of memory whose allocation and deallocation is automatically managed.
     * Local and global variables are allocated from the stack.     * Local and global variables are allocated from the stack.
Line 285: Line 298:
   * ''malloc'' and ''free'' can also used be used to allocate and deallocate storage.   * ''malloc'' and ''free'' can also used be used to allocate and deallocate storage.
   * Part of C and so are available in C++ as well.   * Part of C and so are available in C++ as well.
-  * More cumbersome than ''new'' and ''delete'', and their use is discouraged.+  * More cumbersome than ''new'' and ''delete'', so their use is discouraged.
  
 ===== Returning Pointers from Functions ===== ===== Returning Pointers from Functions =====
cplusplus/pointers_4_slides.txt · Last modified: 2021/10/24 03:02 by mithat

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki