Tutorial Playlist
132 Lessons1. Introduction to C Tutorial
2. Addition of Two Numbers in C
3. Anagram Program in C
4. Armstrong Number in C
5. Array in C
6. Array of Pointers in C
7. Array of Structure in C
8. C Program to Find ASCII Value of a Character
9. Assignment Operator in C
10. Binary Search in C
11. Binary to Decimal in C
12. Bitwise Operators in C
13. Boolean in C
14. C Compiler for Mac
15. C Compiler for Windows
16. C Function Call Stack
17. C Language Download
18. Operators in C
19. C/C++ Preprocessors
20. C Program for Bubble Sort
21. C Program for Factorial
22. C Program for Prime Numbers
23. C Program for String Palindrome
24. C Program to Reverse a Number
25. Reverse a String in C
26. C string declaration
27. String Input Output Functions in C
28. Calculator Program in C
29. Call by Value and Call by Reference in C
30. Ceil Function in C
31. Coding Vs. Programming
32. Command Line Arguments in C/C++
33. Comments in C
34. Compilation process in C
35. Conditional Statements in C
36. Conditional operator in the C
37. Constant Pointer in C
38. Constants in C
39. Dangling Pointer in C
40. Data Structures in C
41. Data Types in C
42. Debugging C Program
43. Convert Decimal to Binary in C
44. Define And include in C
45. Difference Between Arguments And Parameters
46. Difference Between Compiler and Interpreter
47. Difference Between If Else and Switch
48. Do While Loop In C
49. Double In C
50. Dynamic Array in C
51. Dynamic Memory Allocation in C
Now Reading
52. Enumeration (or enum) in C
53. Evaluation of Arithmetic Expression
54. Factorial of A Number in C
55. Features of C Language
56. Fibonacci Series Program in C Using Recursion
57. File Handling in C
58. For Loop in C
59. Format Specifiers in C
60. Functions in C
61. Function Pointer in C
62. goto statement in C
63. C Hello World Program
64. Header Files in C
65. Heap Sort in C Program
66. Hello World Program in C
67. History of C Language
68. How to compile a C program in Linux
69. How to Find a Leap Year Using C Programming
70. Identifiers in C
71. If Else Statement in C
72. If Statement in C
73. Implementation of Queue Using Linked List
74. Increment and decrement operators in c
75. Input and Output Functions in C
76. How To Install C Language In Mac
77. Jump Statements in C
78. Lcm of Two Numbers in C
79. Length of an Array in C
80. Library Function in C
81. Linked list in C
82. Logical Operators in C
83. Macros in C
84. Matrix multiplication in C
85. Nested if else statement in C
86. Nested Loop in C
87. One Dimensional Array in C
88. Operator Precedence and Associativity in C
89. Overflow And Underflow in C
90. Palindrome Program in C
91. Pattern Programs in C
92. Pointer to Pointer in C
93. Pointers in C: A Comprehensive Tutorial
94. Pre-increment And Post-increment
95. Prime Number Program in C
96. Program for Linear Search in C
97. Pseudo-Code In C
98. Random Access Files in C
99. Random Number Generator in C
100. Recursion in C
101. Relational Operators in C
102. Simple interest program in C
103. Square Root in C
104. Stack in C
105. Stack Using Linked List in C
106. Static function in C
107. Stdio.h in C
108. Storage Classes in C
109. strcat() in C
110. Strcmp in C
111. Strcpy in C
112. String Comparison in C
113. String Functions in C
114. String Length in C
115. String Pointer in C
116. strlen() in C
117. Structures in C
118. Structure of C Program
119. Switch Case in C
120. C Ternary Operator
121. Tokens in C
122. Toupper Function in C
123. Transpose of a Matrix in C
124. Two Dimensional Array in C
125. Type Casting in C
126. Types of Error in C
127. Unary Operator in C
128. Use of C Language
129. User Defined Functions in C
130. What is Variables in C
131. Is C language case sensitive
132. Fibonacci Series in C
Dynamic memory allocation is a crucial concept in C programming that allows you to allocate memory dynamically at runtime. Unlike static memory allocation in C, where the memory is allocated at compile-time and remains fixed, dynamic memory allocation enables you to allocate memory as per your program's requirements and release it when no longer needed. This flexibility is essential for handling variable-sized data structures and optimising memory usage.
In this tutorial, we will explore the basics of dynamic memory allocation in C, including its importance, advantages, and various dynamic memory allocation functions. We will also discuss memory leaks, their causes, detection, and prevention, and provide practical dynamic memory allocation in c programming examples to solidify your understanding.
Dynamic memory allocation refers to the process of dynamically allocating and deallocating memory during a program's execution. It allows you to request memory space as per your program's requirements, use it for storing data, and release it when it is no longer needed. The dynamic memory allocation mechanism in C provides functions such as malloc(), calloc(), realloc(), and free() to manage memory dynamically.
Dynamic memory allocation offers several advantages over static memory allocation in C:
Before we dive into dynamic memory allocation, it's essential to understand how memory management works in C. C divides memory into different segments:
Dynamic memory allocation functions, such as malloc(), calloc(), realloc(), and free(), manage memory in the heap segment.
In C programming, memory can be broadly categorised into two types:
In C, the dynamic memory allocation functions provide a way to allocate and deallocate memory dynamically during program execution. These functions reside in the <stdlib.h> header file. Let's take a closer look at each of these functions:
The malloc() function is used to allocate a block of memory in the heap segment. It takes the number of bytes as an argument and returns a pointer to the allocated memory block. The syntax for malloc() function is as follows:
void* malloc(size_t size); |
Here, size is the number of bytes to allocate, and the return type is void* (generic pointer).
Example:
#include <stdio.h> |
In this example, we allocate memory for n integers using malloc(). The size of memory to allocate is calculated using n * sizeof(int). We then assign the returned memory address to the pointer ptr. After using the allocated memory, we deallocate it using the free() function.
The calloc() function is used to allocate memory and initialise it with zero. It takes two arguments: the number of elements to allocate and the size of each element. The total memory allocated by calloc() is the product of the number of elements and the size of each element. The syntax for calloc() function is as follows:
void* calloc(size_t num, size_t size); |
Here, num is the number of elements to allocate, size is the size of each element, and the return type is void* (generic pointer).
Example:
#include <stdio.h> |
In this example, we allocate memory for n integers using calloc(). The size of memory to allocate is calculated using n * sizeof(int). Unlike malloc(), calloc() initialises the allocated memory with zero. We then access and modify the allocated memory as needed and deallocate it using the free() function.
The realloc() function is used to resize the previously allocated memory block. It takes two arguments: a pointer to the previously allocated memory block and the new size in bytes. The return value is a pointer to the resized memory block, which may or may not be the same as the original pointer. If the resizing fails, realloc() returns NULL without modifying the original memory block. The syntax for realloc() function is as follows:
void* realloc(void* ptr, size_t size); |
Here, ptr is a pointer to the previously allocated memory block, size is the new size in bytes, and the return type is void* (generic pointer).
Example:
#include <stdio.h> |
In this example, we first allocate memory for n integers using malloc(). We then access and modify the allocated memory as needed. Later, we resize the memory block using realloc() to accommodate 10 integers. The new size is calculated using 10 * sizeof(int). If the reallocation is successful, the original pointer may or may not change. Finally, we access and modify the reallocated memory and deallocate it using the free() function.
The free() function is used to deallocate the memory previously allocated using malloc(), calloc(), or realloc(). It takes a single argument, which is a pointer to the memory block, to deallocate. The syntax for free() function is as follows:
void free(void* ptr); |
Here, ptr is the pointer to the memory block to deallocate.
Example:
#include <stdio.h> |
In this example, we allocate memory for n integers using malloc(). After accessing and modifying the allocated memory, we deallocate it using the free() function. It is crucial to deallocate the dynamically allocated memory to prevent memory leaks.
A memory leak occurs when dynamically allocated memory is not deallocated properly after it is no longer needed. Memory leaks can occur due to several reasons, including:
Memory leaks can result in excessive memory usage, degraded program performance, and even program crashes.
To detect and prevent memory leaks, follow these best practices:
To deallocate dynamically allocated memory using the free() function, follow these steps:
Here's an example demonstrating how to deallocate memory using free():
#include <stdio.h> |
While it is essential to deallocate dynamically allocated memory using the free() function, there are situations where you may not be able to or need to deallocate the memory manually. In such cases, the operating system automatically reclaims the memory when the program terminates. However, relying on the operating system to deallocate memory can lead to memory leaks and is generally not recommended.
Dynamic memory allocation finds applications in various areas of C programming, including:
Dynamic memory allocation is a crucial concept in C programming that enables flexible and efficient memory management. By using functions like malloc(), calloc(), realloc(), and free(), you can allocate memory as per your program's needs and release it when no longer required.
Ready to take your C programming skills to the next level? Explore advanced programming courses like Full Stack Software Development Program offered by upGrad and enhance your knowledge of dynamic memory allocation and other important topics in C programming.
Upgrade your skills and become a proficient C programmer today!
Q1: What is the difference between static and dynamic memory allocation in C?
Static memory allocation in C refers to memory allocation at compile-time, where the memory is fixed and remains constant throughout the program's execution. On the other hand, dynamic memory allocation allows memory allocation and deallocation at runtime, providing flexibility in managing memory requirements.
Q2: What are the advantages of dynamic memory allocation in C?
Dynamic memory allocation offers several advantages, including flexibility in memory allocation, efficient memory usage, reduced memory footprint, and the ability to handle dynamic data structures.
Q3: How do I deallocate dynamically allocated memory in C?
To deallocate dynamically allocated memory in C, you need to use the free() function and pass it the pointer to the allocated memory block. This releases the memory and makes it available for reuse.
PAVAN VADAPALLI
Director of Engineering
Director of Engineering @ upGrad. Motivated to leverage technology to solve problems. Seasoned leader for startups and fast moving orgs. Working …Read More
Popular
Talk to our experts. We’re available 24/7.
Indian Nationals
1800 210 2020
Foreign Nationals
+918045604032
upGrad does not grant credit; credits are granted, accepted or transferred at the sole discretion of the relevant educational institution offering the diploma or degree. We advise you to enquire further regarding the suitability of this program for your academic, professional requirements and job prospects before enrolling. upGrad does not make any representations regarding the recognition or equivalence of the credits or credentials awarded, unless otherwise expressly stated. Success depends on individual qualifications, experience, and efforts in seeking employment.
upGrad does not grant credit; credits are granted, accepted or transferred at the sole discretion of the relevant educational institution offering the diploma or degree. We advise you to enquire further regarding the suitability of this program for your academic, professional requirements and job prospects before enr...