SlideShare a Scribd company logo
1 of 16
References
      and
Dynamic Memory
   Allocation
OBJECTIVES
• To be able to use references as function
  parameters.
• To be able to return references by
  functions
• To understand the difference between
  static and dynamic memory allocation
• To be able to allocate, process and
  deallocate dynamic arrays
PASSING REFERENCES TO
         FUNCTIONS

• 3 methods for passing values to
  functions: by value, address,
  reference.

• When passed to functions, references
  have a clear advantage over pointers.
void set(int x, int &ce, int &co)
{
  if((x%2)==0)
        ce++;
  else
       co++;                Passing by reference
}
                            - Is like passing the address of variable used as
int main(){                    argument in function call.
    int num,
                         -   When reference is used within the function,
    int even = 0;            compiler automatically uses odd variable, which
    int odd = 0;             is referenced by co.


    cin>>num;
    set(num, even, odd);
    cout<<“even:”<<even<<“ odd:”<<odd;
}
Reference parameter can be preceded with const to prevent a
 function from changing them inadvertently
 void fun(const int &cref)
 {
    cout<<cref/15;      //Okay
    cref++;             //ERROR! Can’t modify a const reference
 }


//Pointers as function parameters

void set(int x, int *ce, int *co){
  if((x%2)==0)
        *ce++;           //A pointer has to be dereferenced
  else
       *co++;
}
set(num, &even, &odd);                //Function called
Both same effect, but references as function
     parameter have several advantages

• Code is cleaner, no *.

• Does not have to remember to pass address of
  function argument.

• Unlike passing with a pointer, no memory location
  required.
RETURNING REFERENCES BY
        FUNCTIONS

• A function may return a reference.

• Returning a reference by a function
  also permits the function to be called
  from left side of assignment operator.
Function returns a reference to the a[n] array
const int SIZE = 6;
                             element.
int & put_val(int a[], int n){
    if(n>=SIZE || n<0){
          cout<<“Out of boundaries”; exit(1);
    }
    return a[n]; }                                        OUTPUT:
                                                          array[0] = 0
                                                          array[1] = 2
   // put_val(array, i) = i *2;
                                                          array[2] = 4
   // array[I] = i *2;
                                                          array[3] = 6
                                                          array[4] = 8
int main(){                                               array[5] = 10
   int array[SIZE];
   for(int i=0; i<SIZE; i++)
           put_val(array, i)=i*2;    //function call on the left
  for(int j=0; j<SIZE; j++)
           cout<<“array[“<<j<<“] = “<<array[j]<<endl;
}
• Less prone error than a direct assignment.

• put_val() checks at runtime that the array
  boundaries are not exceeded before it returns
  a reference to an array element.

• Prevents runtime errors such as array
  overflows/underflows(caused by assigning a
  value to an array element specified by the
  index that is outside of the boundaries of the
  array)
DYNAMIC
 MEMORY
ALLOCATION
STATIC VERSUS DYNAMIC
• STATIC MEMORY ALLOCATION - fixed size array to allocate
  memory.
• An amount of memory allocated - reserved when the program is loaded
  into memory.
• Could fail if run on comp. system lack enough memory.

struct comp_part{
   char code[7];
   char description[30];
   int on_stock;
   int sold;
   float price;
};

comp_part list[100];
• DYNAMIC MEMORY ALLOCATION solve
  this problem.
• Allocate memory at run-time.
• pointer_var = new data_type(initial value);
• delete pointer_var;
• Eg:
  float *fpt = new float(0.0);
 if(fpt==0){                    //checks for memory allocation error
    cout<<“Memory allocation error.”; exit(1);
 }
*fpt = 3.45;                    //uses pointer to access memory
cout<<*fpt;
delete fpt;                    //frees memory allocate dynamically
Memory Leak

float *ptr = new float;   //Allocates 1st block
*ptr = 7.9;                //Accesses 1st block
ptr = new float;           //Allocates 2nd block
*ptr = 5.1;               //Accesses 2nd block


• 1st memory block not deleted, address lost.
• Pointer contain address of 2nd block.
• Without delete, causes memory leak.
DYNAMIC ARRAY
• Dynamically allocated array - variable size.
• Allocate single-dimensional dynamic array:-
      Pointer_var = new data_type[size];
• Deallocate single-dimensional dynamic array:-
      Delete []pointer_var
• Eg.:-

int *ptr;
ptr = new int[10];

for(int i=0; i<10; i++)
     ptr[i] = (i+1)*2;
delete []ptr;
•Allocate two-dimensional dynamic array:-
      data_type **pointer_var;
      pointer_var = new data_type *[size];
•Deallocate two-dimensional dynamic array:-
      as shown in paper.

More Related Content

What's hot (20)

Pointer
PointerPointer
Pointer
 
C programming - Pointers
C programming - PointersC programming - Pointers
C programming - Pointers
 
Pointers in C/C++ Programming
Pointers in C/C++ ProgrammingPointers in C/C++ Programming
Pointers in C/C++ Programming
 
This pointer
This pointerThis pointer
This pointer
 
Arrays
ArraysArrays
Arrays
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
Function
FunctionFunction
Function
 
Dynamic memory allocation in c++
Dynamic memory allocation in c++Dynamic memory allocation in c++
Dynamic memory allocation in c++
 
Collection frame work
Collection  frame workCollection  frame work
Collection frame work
 
Pointers+(2)
Pointers+(2)Pointers+(2)
Pointers+(2)
 
Pointer in c
Pointer in cPointer in c
Pointer in c
 
Pointers_c
Pointers_cPointers_c
Pointers_c
 
Arrays
ArraysArrays
Arrays
 
Arrays in C++
Arrays in C++Arrays in C++
Arrays in C++
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
C programming day#2.
C programming day#2.C programming day#2.
C programming day#2.
 
Multidimensional arrays in C++
Multidimensional arrays in C++Multidimensional arrays in C++
Multidimensional arrays in C++
 
C - aptitude3
C - aptitude3C - aptitude3
C - aptitude3
 
Pointers
PointersPointers
Pointers
 
C tech questions
C tech questionsC tech questions
C tech questions
 

Similar to References, Dynamic Memory, and Allocation

Similar to References, Dynamic Memory, and Allocation (20)

Operator overloading
Operator overloadingOperator overloading
Operator overloading
 
lecture12.ppt
lecture12.pptlecture12.ppt
lecture12.ppt
 
C++_notes.pdf
C++_notes.pdfC++_notes.pdf
C++_notes.pdf
 
Unit 3
Unit 3 Unit 3
Unit 3
 
Lecture2.ppt
Lecture2.pptLecture2.ppt
Lecture2.ppt
 
Lecture 5Arrays on c++ for Beginner.pptx
Lecture 5Arrays on c++ for Beginner.pptxLecture 5Arrays on c++ for Beginner.pptx
Lecture 5Arrays on c++ for Beginner.pptx
 
Object Oriented Programming using C++ - Part 4
Object Oriented Programming using C++ - Part 4Object Oriented Programming using C++ - Part 4
Object Oriented Programming using C++ - Part 4
 
C++ Nested loops, matrix and fuctions.pdf
C++ Nested loops, matrix and fuctions.pdfC++ Nested loops, matrix and fuctions.pdf
C++ Nested loops, matrix and fuctions.pdf
 
Lec2
Lec2Lec2
Lec2
 
Lec2&3 data structure
Lec2&3 data structureLec2&3 data structure
Lec2&3 data structure
 
Link list
Link listLink list
Link list
 
pointer_in_c_programming_structure and uses.pptx
pointer_in_c_programming_structure and uses.pptxpointer_in_c_programming_structure and uses.pptx
pointer_in_c_programming_structure and uses.pptx
 
Lec2&3 data structure
Lec2&3 data structureLec2&3 data structure
Lec2&3 data structure
 
Lec2
Lec2Lec2
Lec2
 
Lec2&3_DataStructure
Lec2&3_DataStructureLec2&3_DataStructure
Lec2&3_DataStructure
 
6_Array.pptx
6_Array.pptx6_Array.pptx
6_Array.pptx
 
Arrays and function basic c programming notes
Arrays and function basic c programming notesArrays and function basic c programming notes
Arrays and function basic c programming notes
 
pointers
pointerspointers
pointers
 
Lecture#9 Arrays in c++
Lecture#9 Arrays in c++Lecture#9 Arrays in c++
Lecture#9 Arrays in c++
 
Arrays 06.ppt
Arrays 06.pptArrays 06.ppt
Arrays 06.ppt
 

Recently uploaded

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentationphoebematthew05
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 

Recently uploaded (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
costume and set research powerpoint presentation
costume and set research powerpoint presentationcostume and set research powerpoint presentation
costume and set research powerpoint presentation
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 

References, Dynamic Memory, and Allocation

  • 1. References and Dynamic Memory Allocation
  • 2. OBJECTIVES • To be able to use references as function parameters. • To be able to return references by functions • To understand the difference between static and dynamic memory allocation • To be able to allocate, process and deallocate dynamic arrays
  • 3. PASSING REFERENCES TO FUNCTIONS • 3 methods for passing values to functions: by value, address, reference. • When passed to functions, references have a clear advantage over pointers.
  • 4. void set(int x, int &ce, int &co) { if((x%2)==0) ce++; else co++; Passing by reference } - Is like passing the address of variable used as int main(){ argument in function call. int num, - When reference is used within the function, int even = 0; compiler automatically uses odd variable, which int odd = 0; is referenced by co. cin>>num; set(num, even, odd); cout<<“even:”<<even<<“ odd:”<<odd; }
  • 5. Reference parameter can be preceded with const to prevent a function from changing them inadvertently void fun(const int &cref) { cout<<cref/15; //Okay cref++; //ERROR! Can’t modify a const reference } //Pointers as function parameters void set(int x, int *ce, int *co){ if((x%2)==0) *ce++; //A pointer has to be dereferenced else *co++; } set(num, &even, &odd); //Function called
  • 6. Both same effect, but references as function parameter have several advantages • Code is cleaner, no *. • Does not have to remember to pass address of function argument. • Unlike passing with a pointer, no memory location required.
  • 7. RETURNING REFERENCES BY FUNCTIONS • A function may return a reference. • Returning a reference by a function also permits the function to be called from left side of assignment operator.
  • 8. Function returns a reference to the a[n] array const int SIZE = 6; element. int & put_val(int a[], int n){ if(n>=SIZE || n<0){ cout<<“Out of boundaries”; exit(1); } return a[n]; } OUTPUT: array[0] = 0 array[1] = 2 // put_val(array, i) = i *2; array[2] = 4 // array[I] = i *2; array[3] = 6 array[4] = 8 int main(){ array[5] = 10 int array[SIZE]; for(int i=0; i<SIZE; i++) put_val(array, i)=i*2; //function call on the left for(int j=0; j<SIZE; j++) cout<<“array[“<<j<<“] = “<<array[j]<<endl; }
  • 9. • Less prone error than a direct assignment. • put_val() checks at runtime that the array boundaries are not exceeded before it returns a reference to an array element. • Prevents runtime errors such as array overflows/underflows(caused by assigning a value to an array element specified by the index that is outside of the boundaries of the array)
  • 11. STATIC VERSUS DYNAMIC • STATIC MEMORY ALLOCATION - fixed size array to allocate memory. • An amount of memory allocated - reserved when the program is loaded into memory. • Could fail if run on comp. system lack enough memory. struct comp_part{ char code[7]; char description[30]; int on_stock; int sold; float price; }; comp_part list[100];
  • 12. • DYNAMIC MEMORY ALLOCATION solve this problem. • Allocate memory at run-time. • pointer_var = new data_type(initial value); • delete pointer_var; • Eg: float *fpt = new float(0.0); if(fpt==0){ //checks for memory allocation error cout<<“Memory allocation error.”; exit(1); } *fpt = 3.45; //uses pointer to access memory cout<<*fpt; delete fpt; //frees memory allocate dynamically
  • 13. Memory Leak float *ptr = new float; //Allocates 1st block *ptr = 7.9; //Accesses 1st block ptr = new float; //Allocates 2nd block *ptr = 5.1; //Accesses 2nd block • 1st memory block not deleted, address lost. • Pointer contain address of 2nd block. • Without delete, causes memory leak.
  • 15. • Dynamically allocated array - variable size. • Allocate single-dimensional dynamic array:- Pointer_var = new data_type[size]; • Deallocate single-dimensional dynamic array:- Delete []pointer_var • Eg.:- int *ptr; ptr = new int[10]; for(int i=0; i<10; i++) ptr[i] = (i+1)*2; delete []ptr;
  • 16. •Allocate two-dimensional dynamic array:- data_type **pointer_var; pointer_var = new data_type *[size]; •Deallocate two-dimensional dynamic array:- as shown in paper.