C Programming : Dynamic memory allocation & Structures

17
C Programming : Dynamic memory allocation & Structures 2008/11/19 Made by Jimin Hwa ([email protected]) Edited and presented by Souneil Park ([email protected])

description

C Programming : Dynamic memory allocation & Structures. 2008/11/19 Made by Jimin Hwa ([email protected]) Edited and presented by Souneil Park ([email protected]). Contents. Dynamic memory allocation Structure Linked list. Motivation of Dynamic Allocation. - PowerPoint PPT Presentation

Transcript of C Programming : Dynamic memory allocation & Structures

Page 1: C Programming : Dynamic memory allocation & Structures

C Programming :Dynamic memory allocation &

Structures

2008/11/19

Made by Jimin Hwa ([email protected])

Edited and presented by Souneil Park ([email protected])

Page 2: C Programming : Dynamic memory allocation & Structures

Contents Dynamic memory allocation Structure Linked list

2

Page 3: C Programming : Dynamic memory allocation & Structures

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”

1 2 3 4 5 6 7 8

9 10

int []

Page 4: C Programming : Dynamic memory allocation & Structures

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 castingfor (i = 0; i < size; i++) // Initialization

pi[i] = -1;

void* malloc(size_t size) /* <stdlib.h> : malloc/calloc/realloc */

Page 5: C Programming : Dynamic memory allocation & Structures

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

Page 6: C Programming : Dynamic memory allocation & Structures

Dynamic Memory Deallocation Synopsis

Frees the memory space pointed by ptr.

Frees(deallocates) the dynamically allocated memory space

6

void free(void *ptr) /* <stdlib.h> : free */

int *pi;int size, i;

scanf(“%d”, &size);pi = (int *)malloc(sizeof(int) * size);

if (pi != NULL) { free(pi); pi = NULL;

}

Page 7: C Programming : Dynamic memory allocation & Structures

Structure

7

Page 8: C Programming : Dynamic memory allocation & Structures

Structure(Cont’d)

8

struct student { /* struct struct_name{ */ char name[32]; /* definition of members */ int student_id; /* }; */char grade;

};

struct class {struct student member[100];int num_of_students;int average_grade;

};

int main(){struct class CC510; /* struct struct_name var_name */…

}

Page 9: C Programming : Dynamic memory allocation & Structures

Structure Operators Operator for member access : “.” (dot)

connects the structure name and the member namestructure_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

Page 10: C Programming : Dynamic memory allocation & Structures

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

*/

Page 11: C Programming : Dynamic memory allocation & Structures

Structure Comparison

11

if(john == john_clone){ … } /* Wrong */

if(strcmp(John.name, john_clone.name) == 0 && John.student_id == john_clone.student_id && …){…} /*Right */

Page 12: C Programming : Dynamic memory allocation & Structures

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

}

Page 13: C Programming : Dynamic memory allocation & Structures

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

8 7 2 7 1 7

Node

LinkData field

HEAD X

Page 14: C Programming : Dynamic memory allocation & Structures

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; }

Page 15: C Programming : Dynamic memory allocation & Structures

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 1st, 3rd, 5th, … element Then, print the 2nd, 4th, 6th, … element

If zero or a negative integer is entered, terminate the program.

15

Page 16: C Programming : Dynamic memory allocation & Structures

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

Page 17: C Programming : Dynamic memory allocation & Structures

The End Any Question?

17