0% found this document useful (0 votes)
13 views14 pages

DMA ch9

The document discusses Dynamic Memory Allocation (DMA) in C programming, explaining the use of functions like malloc(), calloc(), realloc(), and free() for managing memory at runtime. It provides syntax, descriptions, and examples of each function, along with sample C programs demonstrating their usage. The document emphasizes the importance of DMA when the number of variables is unknown or large, allowing for flexible memory management.

Uploaded by

23ae9
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views14 pages

DMA ch9

The document discusses Dynamic Memory Allocation (DMA) in C programming, explaining the use of functions like malloc(), calloc(), realloc(), and free() for managing memory at runtime. It provides syntax, descriptions, and examples of each function, along with sample C programs demonstrating their usage. The document emphasizes the importance of DMA when the number of variables is unknown or large, allowing for flexible memory management.

Uploaded by

23ae9
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

CH-9 DYNAMIC

MEMORY ALLOCATION
Dynamic Memory Allocation (DMA)

◻ If memory is allocated at runtime (during execution of program)


then it is called dynamic memory.
◻ It allocates memory from heap (heap: it is an empty area in
memory)
◻ Memory can be accessed only through a pointer.

When DMA is needed?


◻ It is used when number of variables are not known in advance or
large in size.
◻ Memory can be allocated at any time and can be released at any
time during runtime.
malloc() function
◻ malloc () is used to allocate a fixed amount of memory during the
execution of a program.
◻ malloc () allocates size_in_bytes of memory from heap, if the
allocation succeeds, a pointer to the block of memory is returned else
NULL is returned.
◻ Allocated memory space may not be contiguous.
◻ Each block contains a size, a pointer to the next block, and the space
itself.
◻ The blocks are kept in ascending order of storage address, and the last
block points to the first.
◻ The memory is not initialized.
Syntax Description
ptr_var = (cast_ty This statement returns a pointer to size_in_bytes of
pe *) malloc uninitialized storage, or NULL if the request cannot be
(size_in_bytes); satisfied.

Example: fp = (int *)malloc(sizeof(int) *20);


Write a C program to allocate memory using malloc.

Program
1 #include <stdio.h>
2 void main()
3 {
4 int *fp; //fp is a pointer variable
5 fp = (int *)malloc(sizeof(int)); //returns a pointer to int
6 size storage
7 *fp = 25; //store 25 in the address pointed by fp
8 printf("%d", *fp); //print the value of fp, i.e. 25
9 free(fp); //free up the space pointed to by fp
}

Output
25
calloc() function

◻ calloc() is used to allocate a block of memory during the


execution of a program
◻ calloc() allocates a region of memory to hold no_of_blocks
of size_of_block each, if the allocation succeeds then a pointer
to the block of memory is returned else NULL is returned.
◻ The memory is initialized to ZERO.

Syntax Description
ptr_var = (cast_typ This statement returns a pointer to no_of_blocks of size
e *) calloc size_of_blocks, it returns NULL if the request cannot be
(no_of_blocks, satisfied.
size_of_block);
Example:
int n = 20;
fp = (int *)calloc(n, sizeof(int));
Write a C program to allocate memory using calloc.

Program
1 #include <stdio.h>
2 void main()
3 {
4 int i, n; //i, n are integer variables
5 int *fp; //fp is a pointer variable
6 printf("Enter how many numbers: ");
7 scanf("%d", &n);
8 fp = (int *)calloc(n, sizeof(int)); //calloc returns a pointer
9 to n blocks
10 for(i = 0; i < n; i++)
11 //loop through until all the blocks are
12 read
13 {
14 scanf("%d",fp); //read and store into location where fp poi
nts
fp++; //increment the pointer variable
}
free(fp); //frees the space pointed to by fp
realloc() function

◻ realloc() changes the size of the object pointed to by pointer fp to


specified size.
◻ The contents will be unchanged up to the minimum of the old and new
sizes.
◻ If the new size is larger, the new space will be uninitialized.
◻ realloc() returns a pointer to the new space, or NULL if the request
cannot be satisfied, in which case *fp is unchanged.

Syntax Description
ptr_var = (cast_t This statement returns a pointer to new space, or
ype *) realloc NULL if the request cannot be satisfied.
(void *fp,
size_t); Example:
fp = (int *)realloc(fp,sizeof(int)*20);
Write a C program to allocate memory using realloc.

Program
1 #include <stdio.h>
void main()
2 {
3 int *fp; //fp is a file pointer
4 fp = (int *)malloc(sizeof(int)); //malloc returns a pointer to int size storage
5 *fp = 25; //store 25 in the address pointed by fp
fp =(int *)realloc(fp, 2*sizeof(int)); //returns a pointer to new space
6 printf("%d", *fp); //print the value of fp
7 free(fp); //free up the space pointed to by fp
8 }
9

Output
25
free() function

◻ free deallocates the space pointed to by fp.


◻ It does nothing if fp is NULL.
◻ fp must be a pointer to space previously allocated by
calloc, malloc or realloc.

Syntax Description
void free(void *); This statement free up the memory not needed anymore.

Example: free(fp);
Write a C program to sort numbers using malloc

Program Program (cont.)


1 #include<stdio.h> 17 if(p[i] > p[j])
2 #include<stdlib.h> 18 {
3 void main() 19 t = p[i];
{ p[i] = p[j];
4 20
int i,j,t,n; p[j] = t;
5 int *p; 21 }
6 printf("Enter value of n: "); 22 }
7 scanf("%d", &n); 23 }
8 p=(int *) malloc(n * sizeof(int)); 24 printf("Ascending order\n");
9 printf("Enter values\n"); 25 for(i=0; i<n; i++)
10 for(i=0; i<n; i++) 26 printf("%d\n", p[i]);
11 scanf("%d", &p[i]); 27 free(p);
for(i=0; i<n; i++)
12 28 }
{
13 for(j= i+1; j<n; j++) 29
14 {
15
16
Write a C program to find square of numbers using calloc

Output
Program
1 #include<stdio.h> Enter value of n: 3
2 #include<stdlib.h> Enter values
3 void main() 3
4 { 2
5 int i,n; 5
6 int *p; Square of 3 = 9
7 printf("Enter value of n: "); Square of 2 = 4
8 scanf("%d",&n); Square of 5 = 25
9 p=(int*)calloc(n,sizeof(int));
10 printf("Enter values\n");
11 for(i=0;i<n;i++)
12 scanf("%d",&p[i]);
13 for(i=0;i<n;i++)
14 printf("Square of %d = %d\n", p[i],
15 p[i] * p[i]);
16 free(p);
17 }
Write a C program to add/remove item from a list using realloc

Program
1 #include<stdio.h>
2 #include<stdlib.h>
3 void main()
4 {
5 int i, n1, n2;
6 int *fp;
7 printf("Enter size of list: ");
8 scanf("%d", &n1);
9 fp=(int *) malloc (n1 * sizeof(int));
10
11 printf("Enter %d numbers\n", n1);
12 for(i = 0; i < n1; i++)
13 scanf("%d", &fp[i]);
14
15 printf("The numbers in the list are\n");
16 for(i = 0; i < n1; i++)
17 printf("%d\n", fp[i]);
Program (cont.)
18
19 printf("Enter new size of list: ");
20 scanf("%d", &n2);
21
22 fp = realloc(fp, n2 * sizeof(int));
23 if(n2 > n1)
24 {
25 printf("Enter %d numbers\n", n2 - n1);
26 for(i = n1; i < n2; i++)
27 scanf("%d", &fp[i]);
28 }
29 printf("The numbers in the list are\n");
30 for(i = 0; i < n2; i++)
31 printf("%d\n", fp[i]);
32 }
Thank you !!

You might also like