Presentation is loading. Please wait.

Presentation is loading. Please wait.

EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019

Similar presentations


Presentation on theme: "EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019"— Presentation transcript:

1 EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019
Lecture 18: Dynamic allocation

2 Announcements/reminders
Program 2 due 3/21 Exam 2: Monday, 4/1, 3-5 PM, Ball 214 Use same poll as before to request alt. exam (I’ll repost link) Today’s lecture Dynamic allocation 4/26/2019 Data Structures: Lecture 18

3 Data Structures: Lecture 18
Refresher on pointers Allocators (malloc, new) return pointer to allocated space Pointer: address of another object Can get address of existing object using & Can get value of existing pointer using * Pointer declaration: <base type>* <pointer name> Base type determines how reference is interpreted Be careful when declaring multiple pointers Be sure to initialize pointer before use 4/26/2019 Data Structures: Lecture 18

4 Refresher on pointers, pt. 2
Can assign pointers to one another; e.g. int x, *xp, *ip; xp = &x; ip = xp; Array/pointer duality Array name is pointer to first element Can dereference array name (*arr) Can treat pointers like arrays (ptr[i]) 4/26/2019 Data Structures: Lecture 18

5 Dynamic memory allocation
Up until now, allocated memory statically Assumed we knew data size at compile time What if data size is input-dependent and unknown until run time? In C, dynamic memory allocation handled through malloc and free In C++, we use new and delete Allocator (new) returns pointer to allocated space 4/26/2019 Data Structures: Lecture 18

6 Data Structures: Lecture 18
Allocation with new In C, malloc()allocates space on heap malloc(sizeof(int)) allocates space for 1 integer malloc(20*sizeof(int)) allocates an array of 20 integers Both calls return pointer to first byte of element In C++, we use new new int allocates space for 1 integer new int[20] allocates an array of 20 integers As with malloc(), new returns pointer to first byte Directly initialize with value in parentheses e.g. new int(3) 4/26/2019 Data Structures: Lecture 18

7 Data Structures: Lecture 18
Example int *iPtr; iPtr = new int; // 4 bytes are allocated // iPtr points to 1st byte double *dPtr; dPtr = new double[20]; // 160 bytes allocated // dPtr points to 1st byte heap iPtr ? 4 bytes allocated for single int variable dPtr 160 bytes allocated for 20 double variables 4/26/2019 Data Structures: Lecture 18

8 Dynamic allocation example
int main() { int *iPtr, *jPtr, i; iPtr = new int; jPtr = new int(3); double *dPtr; dPtr = new double[6]; *iPtr = 7; cout << *iPtr << ',' << *jPtr << endl; for(i=0; i<6; i++) dPtr[i] = 5; cout << (*dPtr)++ << ' '; cout << endl; cout << dPtr[i] << ' '; return 0; } OUTPUT 7, 3 Why? 4/26/2019 Data Structures: Lecture 18

9 Dynamically allocated objects
May want to dynamically allocate objects Ex. array of Points where size is unknown at compile time Point *pointArray; int numPoints; cin >> numPoints; pointArray = new Point[numPoints]; Ex. linked list data structure—to add an element to the list, must allocate new element class linkedList { private: int elem; linkedList *next; public: linkedList(); linkedList(int val); void addElement(int i); ... } void linkedList::addElement(int i) { next = new linkedList(i); 4/26/2019 Data Structures: Lecture 18

10 Referencing objects through pointers
Recall: use dot operator (.) to reference members of object, e.g: Point p1; p1.setX(2); With pointers, use -> linkedList *list1 = new linkedList; list1->addElement(2); 4/26/2019 Data Structures: Lecture 18

11 Deallocation with delete
Space allocated using new should be freed In C, we used free() In C++, we use delete You should only use delete to free memory allocated by new Any other use will result in an error 4/26/2019 Data Structures: Lecture 18

12 Data Structures: Lecture 18
delete example int *ptr; ptr = new int (100); ptr 100 delete ptr; //free the memory ptr ? delete frees space on heap ... ... but ptr still points to same address! Solution: assign freed pointers to NULL: ptr = NULL; 4/26/2019 Data Structures: Lecture 18

13 Example: delete with arrays
double *dptr; const int SIZE = 10; dptr = new double[SIZE]; //80 bytes for(int i=0; i<SIZE; ++i) cin >> dptr[i]; fun1(dptr, SIZE); // pass array to fun1 delete [] dptr; //free all 10 elements dptr = NULL; 4/26/2019 Data Structures: Lecture 18

14 Data Structures: Lecture 18
Final notes Next time Stacks Reminders: Program 2 due 3/21 Exam 2: Monday, 4/1, 3-5 PM, Ball 214 Use same poll as before to request alt. exam (I’ll repost link) 4/26/2019 Data Structures: Lecture 18


Download ppt "EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019"

Similar presentations


Ads by Google