|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Want a new Job?
Chapters
Services
Feature Zones
|
IntroductionMemory leakage has always been a part of bugs in C code where a programmer allocates memory in run time (in heap) and fails to deallocate it. Most programmers use some third party software to detect memory leakage in their code, but we can also write very simple code to detect memory leakage in our program ourselves. Usually we allocate memory in C using Using the codeLet's assume that you have allocated some memory in your code using test.c
#include<malloc.h>
int main()
{
char * ptr1 = (char *) malloc (10);
// allocating 10 bytes
int * ptr2 = (int *) calloc (10, sizeof(int));
// allocating 40 bytes let sizeof int = 4 bytes)
float * ptr3 = (float *) calloc (15, sizeof(float));
// allocating 60 bytes
............
............
............
free(ptr2);
return 0;
}
Steps for detecting memory leakageI have tested the code in a Linux machine using GCC. You can test the same code in Windows, as well. Step 1To test for a memory leak, just add the leak_detector_c.h file to the test file and then add one line to the start of main function. Now the test code should look like below: test.c
#include<malloc.h>
#include "leak_detector_c.h"
int main()
{
char * ptr1;
int * ptr2;
float * ptr3;
atexit(report_mem_leak);
ptr1 = (char *) malloc (10);
// allocating 10 bytes
ptr2 = (int *) calloc (10, sizeof(int));
// allocating 40 bytes let sizeof int = 4 bytes)
ptr3 = (float *) calloc (15, sizeof(float));
// allocating 60 bytes
............
............
............
free(ptr2);
return 0;
}
Step 2Now compile the code and run the program. # gcc -c leak_detector_.c
# gcc -c test.c
# gcc -o memtest leak_detctor_c.o test.o
# ./memtest
# cat /home/leak_info.txt
You will get output like below:
Memory Leak Summary
-----------------------------------
address : 140668936
size : 10 bytes
file : test.c
line : 5
-----------------------------------
address : 140669560
size : 60 bytes
file : test.c
line : 7
-----------------------------------
The output shows the file name and line number that causes the memory leak. Now you can free the unallocated memory. If you have multiple source files, you can add the header file in all of the files where you want to detect possible memory leaks. Compile the program as above. Next, let's have a look into the code and see how it works. The leak_detctor_c.h file contains some macros. The preprocessor replaces the call of At the end of the program, we can get the unallocated memory references from the list. The line History
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||