ECE Application Programming

Slides:



Advertisements
Similar presentations
Dynamic Memory Allocation in C.  What is Memory What is Memory  Memory Allocation in C Memory Allocation in C  Difference b\w static memory allocation.
Advertisements

Dynamic Memory Allocation
CS1061: C Programming Lecture 21: Dynamic Memory Allocation and Variations on struct A. O’Riordan, 2004, 2007 updated.
COMP 1402 Winter 2009 Tutorial #8 malloc / calloc / realloc.
Dynamically Allocated Memory String CGS 3460, Lecture 33 Apr 3, 2006 Hen-I Yang.
ECE Application Programming Instructor: Dr. Michael Geiger Fall 2012 Lecture 31: Dynamic memory allocation.
Spring 2005, Gülcihan Özdemir Dağ Lecture 12, Page 1 BIL104E: Introduction to Scientific and Engineering Computing, Spring Lecture 12 Outline 12.1Introduction.
Managing Memory Static and Dynamic Memory Type Casts Allocating Arrays of Dynamic Size Resizing Block of Memory Returning Memory from a Function Avoiding.
Pointers A pointer is a reference to another variable (memory location) in a program –Used to change variables inside a function (reference parameters)
CSCI 171 Presentation 11 Pointers. Pointer Basics.
Managing Memory DCT 1063 PROGRAMMING 2 Mohd Nazri Bin Ibrahim Faculty of Computer, Media & Technology TATi University College
Growing Arrays in C By: Victoria Tielebein CS 265- Spring 2011.
1 Memory Allocation Professor Jennifer Rexford COS 217.
Agenda  Review: pointer & array  Relationship between pointer & array  Dynamic memory allocation.
More Pointers Write a program that: –Calls a function to input an integer value –The above function calls another function that will double the input value.
Pointer applications. Arrays and pointers Name of an array is a pointer constant to the first element whose value cannot be changed Address and name refer.
Kernighan/Ritchie: Kelley/Pohl:
Memory Allocation. Memory A memory or store is required in a computer to store programs (or information or data). Data used by the variables in a program.
Memory allocation CSE 2451 Matt Boggus. sizeof The sizeof unary operator will return the number of bytes reserved for a variable or data type. Determine:
Dynamic memory allocation. The process of allocating memory at run time is known as dynamic memory allocation. C have four library functions for allocating.
Programming III SPRING 2015 School of Computer and Information Sciences Francisco R. Ortega, Ph.D. McKnight Fellow and GAANN Fellow LECTURE #5 More about.
1 Day 03 Introduction to C. 2 Memory layout and addresses r s int x = 5, y = 10; float f = 12.5, g = 9.8; char c = ‘r’, d = ‘s’;
Memory Arrangement Memory is arrange in a sequence of addressable units (usually bytes) –sizeof( ) return the number of units it takes to store a type.
1 Chapter 9 Arrays and Pointers. 2  One-dimensional arrays  The Relationship between Arrays and Pointers  Pointer Arithmetic and Element Size  Passing.
CS 11 C track: lecture 5 Last week: pointers This week: Pointer arithmetic Arrays and pointers Dynamic memory allocation The stack and the heap.
17. ADVANCED USES OF POINTERS. Dynamic Storage Allocation Many programs require dynamic storage allocation: the ability to allocate storage as needed.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Tevfik Bultan Lecture 12: Pointers continued, C strings.
1 C - Memory Simple Types Arrays Pointers Pointer to Pointer Multi-dimensional Arrays Dynamic Memory Allocation.
Lecture 13 Static vs Dynamic Memory Allocation
ECE 264 Object-Oriented Software Development Instructor: Dr. Honggang Wang Fall 2012 Lecture 26: Exam 2 Preview.
ECE 103 Engineering Programming Chapter 47 Dynamic Memory Alocation Herbert G. Mayer, PSU CS Status 6/4/2014 Initial content copied verbatim from ECE 103.
1 Dynamic Memory Allocation –The need –malloc/free –Memory Leaks –Dangling Pointers and Garbage Collection Today’s Material.
Dynamic Memory Allocation. Domain A subset of the total domain name space. A domain represents a level of the hierarchy in the Domain Name Space, and.
C Programming Day 4. 2 Copyright © 2005, Infosys Technologies Ltd ER/CORP/CRS/LA07/003 Version No. 1.0 More on Pointers Constant Pointers Two ways to.
Prachi A. Joshi Assistant Professor in CSE DIEMS,Aurangabad Unit 1 : Basic Concepts Pointers and dynamic memory allocation, Algorithm Specification, Data.
ECE 264 Object-Oriented Software Development Instructor: Dr. Honggang Wang Fall 2012 Lecture 24: Pointers and Dynamic Allocation.
Introduction to Computer Organization & Systems Topics: C arrays C pointers COMP Spring 2014 C Part IV.
ECE Application Programming Instructors: Dr. Michael Geiger & Nasibeh Nasiri Fall 2015 Lecture 31: Structures (cont.) Dynamic memory allocation.
ECE Application Programming
1 Dynamic Memory Allocation. 2 In everything we have done so far, our variables have been declared at compile time. In these slides, we will see how to.
MORE POINTERS Plus: Memory Allocation Heap versus Stack.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Lucas Bang Lecture 11: Pointers.
BIL 104E Introduction to Scientific and Engineering Computing Lecture 9.
DYNAMIC MEMORY ALLOCATION. Disadvantages of ARRAYS MEMORY ALLOCATION OF ARRAY IS STATIC: Less resource utilization. For example: If the maximum elements.
Arrays and Pointers (part 1) CSE 2031 Fall July 2016.
CSE 220 – C Programming malloc, calloc, realloc.
Stack and Heap Memory Stack resident variables include:
ECE Application Programming
Introduction to Programming
ECE Application Programming
Dynamic Memory Allocation
Programming Languages and Paradigms
Arrays & Dynamic Memory Allocation
Programming and Data Structures
Pointers and dynamic memory
CSC215 Lecture Memory Management.
Dynamic Memory Allocation
CS111 Computer Programming
Memory Allocation CS 217.
EECE.2160 ECE Application Programming
Dynamic Memory Allocation (and Multi-Dimensional Arrays)
EENG212 – Algorithms & Data Structures Fall 07/08 – Lecture Notes # 5b
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
C Programming Lecture-8 Pointers and Memory Management
Dynamic Memory – A Review
EECE.2160 ECE Application Programming
EECE.2160 ECE Application Programming
Presentation transcript:

16.216 ECE Application Programming Instructors: Dr. Michael Geiger & Nasibeh Nasiri Fall 2015 Lecture 32: Dynamic memory allocation

ECE Application Programming: Lecture 32 Lecture outline Announcements/reminders No lecture Wednesday Program 9 and 10 posted Program 9 due 12/2 Program 10 due 12/9 Will count 9 of 10 programs; drop lowest score Grades done through Program 6 Regrade deadline for outstanding programs: end of semester (12/9) Today’s class Dynamic memory allocation 4/25/2017 ECE Application Programming: Lecture 32

Justifying dynamic memory allocation Data structures (i.e., arrays) usually fixed size Array length set at compile time Can often lead to wasted space May want ability to: Choose amount of space needed at run time Allows program to determine amount Modify size as program runs Data structures can grow or shrink as needed Dynamic memory allocation allows above characteristics 4/25/2017 ECE Application Programming: Lecture 32

Allocation functions (in <stdlib.h>) All return pointer to allocated data of type void * (no base type—just an address) Must cast to appropriate type Arguments of type size_t: unsigned integer Basic block allocation: void *malloc(size_t size); Allocate block and clear it: void *calloc(size_t nmemb, size_t size); Resize previously allocated block: void *realloc(void *ptr, 4/25/2017 ECE Application Programming: Lecture 32

Basic allocation with malloc() void *malloc(size_t size); Allocates size bytes; returns pointer Returns NULL if unsuccessful Example: int *p; p = malloc(10000); if (p == NULL) { /* Allocation failed */ } 4/25/2017 ECE Application Programming: Lecture 32

ECE Application Programming: Lecture 32 Type casting All allocation functions return void * Automatically type cast to appropriate type Can explicitly perform type cast: int *p; p = (int *)malloc(10000); Some IDEs (including Visual Studio) strictly require type cast 4/25/2017 ECE Application Programming: Lecture 32

Allocating/clearing memory: calloc() void *calloc(size_t nmemb, size_t size); Allocates (nmemb * size) bytes Sets all bits in range to 0 Returns pointer (NULL if unsuccessful) Example: integer array with n values int *p; p = (int *)calloc(n, sizeof(int)); 4/25/2017 ECE Application Programming: Lecture 32

Resizing allocated space: realloc() void *realloc(void *ptr, size_t size); ptr must point to previously allocated space Will allocate size bytes and return pointer size = new block size Rules: If block expanded, new bytes aren’t initialized If block can’t be expanded, returns NULL; original block unchanged If ptr == NULL, behaves like malloc() If size == 0, will free (deallocate) space Example: expanding array from previous slide p = (int *)realloc(p, (n+1)*sizeof(int)); 4/25/2017 ECE Application Programming: Lecture 32

Deallocating memory: free() All dynamically allocated memory should be deallocated when you are done using it Returns memory to list of free storage Once freed, program should not use location Deallocation function: void free(void *ptr); Example: int *p; p = (int *)malloc(10000); ... free(p); 4/25/2017 ECE Application Programming: Lecture 32

ECE Application Programming: Lecture 32 Application: arrays One common use of dynamic allocation: arrays Can determine array size, then create space Use sizeof() to get # bytes per element Array notation can be used with pointers int i, n; int *arr; printf("Enter n: "); scanf("%d", &n); arr = (int *)malloc(n * sizeof(int)); for (i = 0; i < n; i++) arr[i] = i; 4/25/2017 ECE Application Programming: Lecture 32

Example: what does program print? void main() { int *arr; int n, i; n = 7; arr = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n"); n = 3; arr = (int *)realloc(arr, n * sizeof(int)); for (i = 0; i < n; i++) { arr[i] = i * i; } n = 6; arr = (int *)realloc(arr, n * sizeof(int)); for (i = 0; i < n; i++) { arr[i] = 10 - i; printf("%d ", arr[i]); } free(arr); 4/25/2017 ECE Application Programming: Lecture 32

ECE Application Programming: Lecture 32 Solution Output: 0 0 0 0 0 0 0 0 1 4 10 9 8 7 6 5 4/25/2017 ECE Application Programming: Lecture 32

Pitfalls: memory leaks Changing pointers leaves inaccessible blocks Example: p = malloc(1000); q = malloc(1000); p = q; Block originally accessed by p is “garbage” Won’t be deallocated—wasted space Solution: free memory before changing pointer free(p); 4/25/2017 ECE Application Programming: Lecture 32

Pitfalls: dangling pointers free() doesn’t change pointer Only returns space to free list Pointer is left “dangling” Holds address that shouldn’t be accessed Solution: assign new value to pointer Could reassign immediately (as in previous slide) Otherwise, set to NULL free(p); p = NULL; 4/25/2017 ECE Application Programming: Lecture 32

Dynamically allocated strings Strings  arrays of characters Basic allocation: based on string length sizeof(char) is always 1 Need to account for null character Example: copying from s to str char *str = (char *)malloc(strlen(s) + 1); strcpy(str, s); Note: dynamically allocated strings must be deallocated when you are done with them 4/25/2017 ECE Application Programming: Lecture 32

Dynamically allocated 2D arrays Think of each row as 1D array 2D array: an array of 1D arrays Since array is technically a pointer, 2D array can be implemented as array of pointers Data type: “pointer to pointer” Example: int **twoDarr; 1st dimension depends on # rows twoDarr = (int **)malloc(nRows * sizeof(int *)); 2nd dimension depends on # columns Must allocate for each row for (i = 0; i < nRows; i++) twoDarr[i] = (int *)malloc(nCols * sizeof(int)); 4/25/2017 ECE Application Programming: Lecture 32

ECE Application Programming: Lecture 32 Example Complete each of the following functions char *readLine(): Read a line of data from the standard input, store that data in a dynamically allocated string, and return the string (as a char *) Hint: Read the data one character at a time and repeatedly reallocate space in the string int **make2DArray(int total, int nR): Given the total number of values and number of rows to be stored in a two-dimensional array, determine the appropriate number of columns, allocate the array, and return its starting address Note: if nR does not divide evenly into total, round up. In other words, an array with 30 values and 4 rows should have 8 columns, even though 30 / 4 = 7.5 4/25/2017 ECE Application Programming: Lecture 32

ECE Application Programming: Lecture 32 Solution char *readLine() { char c; // Input character char *str = NULL; // String to hold line int n = 1; // Length of str // Repeatedly store character in str until // '\n' is read; resize str to hold char while ((c = getchar()) != '\n') { str = (char *)realloc(str, n+1); str[n-1] = c; n++; } str[n-1] = '\0'; // Null terminator return str; 4/25/2017 ECE Application Programming: Lecture 32

ECE Application Programming: Lecture 32 Solution (continued) int **make2DArray(int total, int nR) { int **arr; // 2-D array int nCols; // # of columns int i; // Row index // Calculate nCols; round up if nR does not divide evenly nCols = total / nR; if ((total % nR) != 0) nCols++; // Allocate array--first array of rows, then each row arr = (int **)malloc(nR * sizeof(int *)); for (i = 0; i < nR; i++) arr[i] = (int *)malloc(nCols * sizeof(int)); return arr; } 4/25/2017 ECE Application Programming: Lecture 32

ECE Application Programming: Lecture 32 Next time Dynamically allocated data structures (Monday, 11/30) Reminders: No lecture Wednesday Program 9 and 10 posted Program 9 due 12/2 Program 10 due 12/9 Will count 9 of 10 programs; drop lowest score Grades done through Program 6 Regrade deadline for outstanding programs: end of semester (12/9) 4/25/2017 ECE Application Programming: Lecture 32