×

Memory leak in C

What is memory leak in C?

Memory leak occurs when we keep allocating memory in the heap without freeing it, i.e., the allocated memory in heap is not released back to the heap. The overall memory usage keeps on increasing and reduces the available memory for the program which results in reduction of efficiency or program performance. It may also lead to program crashes.

In order to understand the concept of memory leak, we must be aware of Dynamic Memory Allocation.

Dynamic Memory Allocation

This manual declaration of memory at run time is known as dynamic memory allocation and this is carried by a special set of functions known as library functions. The calloc() is a library function in C which is used for dynamic memory allocation.

The malloc() function also performs the task of memory allocation but the allocated memory is uninitialized.

To summarize, Dynamic Memory Allocation is a way in which the size of a Data Structure can be changed during the runtime.

Note: Memory assigned to a program can be broken down into 4 segments, they are as follows:

  1. Code
  2. Static/ Global variable
  3. Stack
  4. Heap
Heap
Stack
Global/ static variable
Code

Cause of Memory Leak

Memory leak in C can occur due to many reasons, but the prominent reasons for this phenomenon to occur are as follows:

  • It may be caused, when we don’t use dynamic memory properly.
  • When we keep allocating memory in the heap without freeing, i.e., we don't free the memory that is no longer required. This situation is the main cause of memory leak, i.e., the program creates a memory block in memory and forgets to delete it.
  • We try to free the memory but we are not aware of the reference to it (dangling pointer).
  • We try to free the memory using the wrong function.

Note : In order to avoid the situation of memory leak, the memory allocated on heap should always be freed when not required.

Let’s try to understand the concept of memory leak with the help of a C program

Program 1: Memory leak in C

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int x, i = 0;   //declaring the local variables 
    int *p;          //creating a pointer
    while (i< 55565)
    {
       printf("Hello World \n");
       p = malloc(32323 * sizeof(int));  //dynamic memory allocation using malloc()


       /* pointer p points to a heap using a memory block which is 32323 in size */
       if(i%100 == 0) // p comes in multiple of 100
       {
           getchar();   //causes program to stop, i.e our program runs in multiple of 100
       }
       i++;  //incrementing the value of i
    }
    


    return 0;
}

Code explanation:

The program may run smoothly and print desired output, but what actually happens is that every time the program proceeds, i.e., the while loop runs, the memory used by the compiler on the machine will keep on increasing every time the loop executes.

The frequent execution of the code will impact the program performance and it may even cause a program crash.

This is a clear indication of memory leak and it can be resolved by simply using a line of code which frees the memory that is no longer needed.

Program 2: Preventing Memory leak in C

#include <stdio.h>
#include <stdlib.h>


int main()
{
    int x, i = 0;   //declaring the local variables 
    int *p;          //creating a pointer
    while (i< 55565)
    {
       printf("Hello World \n");
       p = malloc(32323 * sizeof(int));  //dynamic memory allocation using malloc()


       /* pointer p points to a heap using a memory block which is 32323 in size */
       if(i%100 == 0) // p comes in multiple of 100
       {
           getchar();   //causes program to stop, i.e our program runs in multiple of 100
       }
       i++;  //incrementing the value of i
       free(p);  //prevents memory leak
    }
    


    return 0;
}

Code explanation:

Using the free() function we are preventing the program from encountering a memory leak. This simple piece of code frees the memory that is no longer needed.

Hence, if we observe the memory usage (in background) after implementing this function, the memory usage will remain the same for every loop count or each iteration of i. This happens because we are clearing the allocated memory that is no longer required.


Related Topics

Static function in C

The functions in the C programming language are by default global. This means the programmer can easily access the function which is outside from the file where it was initially...

3 minutes read.

Data Types in C

Data type is a very important concept in C programming language. Simply, “A data type is the classification of data values that a data item can have.” We need to...

11 minutes read.

fopen() function in C

fopen() function, is one of the file handling functions. It is used to open the existing file and perform operations on the file. If the file does not exist, it...

3 minutes read.

CRC Program in C

CRC (Cyclic Redundancy Check) is an error-detection algorithm that is used to detect any errors that may have occurred during the transmission or storage of data. The basic idea behind...

4 minutes read.

Dangling pointers in C

Dangling pointers in C: A pointer is a variable that stores the memory address of other variables. The pointers may also store the address of other’s memory items. They are...

4 minutes read.

Strcpy() in C

In C language many operations can be performed on a string. Characters in a sequence are known as string. Note:   To use this function we must include the #include<string.h> header file...

4 minutes read.

Distance Vector Routing Protocol Program in c

A distance-vector routing protocol is one of the foremost instructions of routing protocols in pc conversation principle for packet-switched networks. The hyperlink-nation protocol is the alternative foremost class.The Bellman-Ford set...

4 minutes read.

clrscr in C

clrscr function in C clrscr stands for: clr = clear scr= screen When the clrscr() function is called in a program everything currently displayed in the console(output of previous programs, output of current program,...

3 minutes read.

Top Array Keywords in C

Sorting array in C Types of array in C Array of structure in C How do you initialize an array in C Array declaration in C Array of strings in C Multidimensional array in C Reverse array...

1 minute read.

Math functions in C

Math functions in C: In the C programming language, the compiler allows the developer to perform mathematical operations through the header’s functions, represented by <math.h>. The <math.h> header defines various mathematical...

3 minutes read.

What is a buffer in C?

A buffer is an area of memory set aside for the temporary storage of data. A data buffer (or just buffer) is a region of a physical memory storage used to...

5 minutes read.

How to use sine() function in C

What is Function? The function is a set of statements. It takes input and performs some computation to produce output. The process is a set of codes only achieved when it is...

3 minutes read.

How to get ASCII value in C

For text data on computers and the internet, ASCII (American Standard Code for Information Interchange). It is the most widely used character encoding standard. One hundred twenty-eight alphabetic, numeric, special...

3 minutes read.

How to include graphics.h in C?

How to include graphics.h in code blocks? Graphics .h is a header that allows drawing lines, rectangles, ovals, arcs, polygons, pictures, and strings on a graphical window by giving access to...

6 minutes read.

Recursion in C

Recursion is a programming technique that allows the programmer to call the function within the same function. The function which calls the same function is known as recursive function but a...

1 minute read.

Merge and Merge sort with example in C

Assume we have two ordered Integer arrays, a[] and b[]. If we wish to combine them into another ordered array, such as c[], we can use the following straightforward technique. Compare...

3 minutes read.

Recursion in C

Recursion in C: In the C programming language, the concept known as recursion exists that is a technique in which a function calls itself either directly or indirectly. It allows...

4 minutes read.

Function in C

Function is a group of statements that are used to perform any task. In other words, we can say that a function is a self- contained a block of programs...

3 minutes read.

Array to function in C

Array to function in C We can create functions that receive an array as an argument. To pass an array into a function, we need to write the name of the...

4 minutes read.

Null character in C

Introduction The Null character in the C programming language is used to terminate the character strings. In other words, the Null character is used to represent the end of the string...

3 minutes read.