Presentation is loading. Please wait.

Presentation is loading. Please wait.

C Programming : Dynamic memory allocation & Structures 2008/11/19 Made by Jimin Hwa Edited and presented by Souneil Park

Similar presentations


Presentation on theme: "C Programming : Dynamic memory allocation & Structures 2008/11/19 Made by Jimin Hwa Edited and presented by Souneil Park"— Presentation transcript:

1 C Programming : Dynamic memory allocation & Structures 2008/11/19 Made by Jimin Hwa (jmhwa@se.kaist.ac.kr) Edited and presented by Souneil Park (spark@nclab.kaist.ac.kr)

2 Contents Dynamic memory allocation Structure Linked list 2

3 Motivation of Dynamic Allocation The allocated space of an array is not flexible What if more space is required? Data insertion/deletion is difficult 3 char []“CC510” 12345678 910 int []

4 Dynamic Memory Allocation malloc Allocates size bytes and returns a pointer to the allocated memory. 4 int *pi; int size, i; scanf(“%d”, &size); pi = (int *)malloc(sizeof(int) * size); // (type): static type casting for (i = 0; i < size; i++)// Initialization pi[i] = -1; void* malloc(size_t size) /* : malloc/calloc/realloc */

5 Dynamic Memory Allocation (Cont’d) calloc – initializes memory before allocation Allocates size bytes, initialize the space with 0, and returns a pointer to the allocated memory 5 void* calloc(size_t nmeb, size_t size) int *pi; int size, i; scanf(“%d”, &size); pi = (int *)calloc(size, sizeof(int)); // (type): static type casting

6 Dynamic Memory Deallocation Synopsis Frees the memory space pointed by ptr. Frees(deallocates) the dynamically allocated memory space 6 void free(void *ptr) /* : free */ int *pi; int size, i; scanf(“%d”, &size); pi = (int *)malloc(sizeof(int) * size); if (pi != NULL) { free(pi); pi = NULL; }

7 Structure A structure is a collection of variables, possibly of different types, grouped together under a single name. Using structure, we can keep together different pieces of information as a single data record Data packing mechanism Example> structure student attributes: Name, student ID, and grade 7

8 Structure(Cont’d) 8 struct student { /* struct struct_name{ */ char name[32]; /* definition of members */ intstudent_id; /* }; */ chargrade; }; struct class { struct student member[100]; int num_of_students; int average_grade; }; int main(){ struct class CC510; /* struct struct_name var_name */ … }

9 Structure Operators Operator for member access : “.” (dot) connects the structure name and the member name structure_name.member Example> struct student john; john.grade = ‘A’; john.student_id = 4473; int id = john.student_id; operator for member access (pointer) : -> Exmple> struct student *pJohn; pJohn->grade = ‘A’; // (*pJohn).grade = ‘A’; pJohn->student_id = 4473; int id = john->student_id; 9

10 Structure Operators(Cont’d) Assignment between structure variable: “=“ Example> 10 struct student John; struct student John_clone; John.name = “John”; John.grade = ‘A'; John.student_id = 945433; John_clone = John; /* John_clone.name = = “John”, John_clone.grade = = ‘A‘, John_clone.student_id = = 945433 */

11 Structure Comparison We need to compare all fields one by one explicitly. Example> 11 if(john == john_clone){ … } /* Wrong */ if(strcmp(John.name, john_clone.name) == 0 && John.student_id == john_clone.student_id && …){…} /*Right */

12 Structure as a Function Argument They are passed to functions by the usual parameter-passing mechanism The entire structure is copied to the function Example> 12 int fail(struct student of_classA[], int size) { int i, count = 0; for (i=0; i < size; ++i){ if(of_class[i].grade == ‘F’) count ++; } return count }

13 Linked List An alternative to array. Data structure in which objects are arranged in a linear order Consists of nodes, each containing arbitrary data fields and link pointing to the next nodes. The size of a linked list would be changed in runtime. 13 872717 Node LinkData field HEAD X

14 Linked List Implementation An node is represented in a C structure. malloc() is used to dynamically create node structure 14 typedef struct node_t { int data; struct _node_t *next; } node_t; node_t head; head.next = NULL; /* Linked list is empty */ node_t* create_node(int d) { node_t *n = (node_t*)malloc( sizeof(node_t)); if (!n) return NULL; n->data = d; n->next = NULL; return n; }

15 LAB #7 - 1 Implement a circular list Get input from users (through standard input) Input is an integer Whenever a user enters an positive integer, Store the input at the last First, print the 1 st, 3 rd, 5 th, … element Then, print the 2 nd, 4 th, 6 th, … element If zero or a negative integer is entered, terminate the program. 15

16 LAB #7 - 2 Implement a clist_copy function which copies the circular list (struct xxx *) clist_copy (struct xxx *head) { …. } Which returns the head of the copied circular list In the main function, Print the head address of the original list and the copied list Print the elements of the copied circular list in a sequential order 16

17 The End Any Question? 17


Download ppt "C Programming : Dynamic memory allocation & Structures 2008/11/19 Made by Jimin Hwa Edited and presented by Souneil Park"

Similar presentations


Ads by Google