473,406 Members | 2,371 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

Memory leak even after deleting memory pointers from vector

Hi,

I am working on c++ in a linux system ( Fedora core 4 ),
kernel version - 2.6.11-1.1369_FC4
gcc version - 4.0.0 20050519 ( Red Hat 4.0.0-8 )

In my code i am creating a vector to store pointers of type structure "SAMPLE_TABLE_STRUCT" ( size of this structure is 36 bytes ). I create an instance of structure "SAMPLE_TABLE_STRUCT" using operator "new" and push back into the vector,this is done inside a for loop for 204800 times. After i come out of for loop i observe the memory consumed by the process using the command "pmap -d pid". The memory consumption increases by approximately 8 MB. After this i delete all the contents of vector using "delete" operator. Now if i observe the memory consumed by the process ( using "pmap -d pid" command ) it shows no reduction in the memory even after deallocating the memory in the code.

It shows memory reduction after deleting vector contents if i store the "char *" elements into the vector instead of "SAMPLE_TABLE_STRUCT *" elements.

Am not able to figure it out why even after deleting the vector ( of type "SAMPLE_TABLE_STRUCT *" )contents the memory reduction is not seen...?

Can anyone please help me out here...?

Here is the piece of code where am facing the problem -

Expand|Select|Wrap|Line Numbers
  1.  
  2. #define ALTERNATE
  3.  
  4. #define MAX_STRING_VEC_SIZE 134
  5. #define MAX_STRUCT_VEC_SIZE 1024*200//134
  6. #define MAX_MEM_SIZE 1024*50
  7.  
  8.  
  9. /*vector of char * type*/
  10. void Function()
  11. {
  12.     std::vector< char * > v_pData;
  13.  
  14. #ifdef ALTERNATE
  15.     v_pData.resize( MAX_STRING_VEC_SIZE, NULL );
  16. #endif //ALTERNATE
  17.  
  18.     bool bFlag = true;
  19.     while( bFlag );
  20.  
  21.     //Allocate Memory    
  22.     for( int nInd = 0 ; nInd < MAX_STRING_VEC_SIZE; nInd++ )
  23.     {
  24.         char * pData = new char [MAX_MEM_SIZE];
  25.         memset( pData, 0, MAX_MEM_SIZE );
  26.  
  27. #ifdef ALTERNATE
  28.         v_pData[nInd] = pData;
  29. #else  //ALTERNATE
  30.         v_pData.push_back( pData );
  31. #endif //#endif //ALTERNATE
  32.  
  33.     }
  34.  
  35.     bFlag = true;
  36.     while( bFlag );
  37.  
  38.     //Release all the Memory
  39.     for( int nInd = 0 ; nInd < MAX_STRING_VEC_SIZE; nInd++ )
  40.     {
  41.         delete [] v_pData[nInd];
  42.     }
  43.  
  44.     v_pData.clear();
  45. }
  46.  
  47. /*vector of SAMPLE_TABLE_STRUCT * type*/
  48. void Function1()
  49. {
  50.     std::vector< SAMPLE_TABLE_STRUCT * > v_pData;
  51.  
  52. #ifdef ALTERNATE
  53.     v_pData.resize( MAX_STRUCT_VEC_SIZE, NULL );
  54. #endif //ALTERNATE
  55.  
  56.     //Allocate Memory    
  57.     for( int nInd = 0 ; nInd < MAX_STRUCT_VEC_SIZE; nInd++ )
  58.     {
  59.         SAMPLE_TABLE_STRUCT * pData = new SAMPLE_TABLE_STRUCT;
  60.  
  61. #ifdef ALTERNATE
  62.         v_pData[nInd] = pData;
  63. #else  //ALTERNATE
  64.         v_pData.push_back( pData );
  65. #endif //#endif //ALTERNATE
  66.  
  67.     }
  68.  
  69.     //Release all the Memory
  70.     for( int nInd = 0 ; nInd < MAX_STRUCT_VEC_SIZE; nInd++ )
  71.     {
  72.         delete v_pData[nInd];
  73.         v_pData[nInd] = NULL;
  74.     }
  75.  
  76.     v_pData.clear();
  77. }
  78.  
  79.  
Sep 23 '08 #1
3 2635
weaknessforcats
9,208 Expert Mod 8TB
The vector is a vector of char* and from your post you added 204800 char* to the vector. After you delete the char* from the vector I would not expect the vector to get smaller. That's because vector is optimized for speed and once it has got to a size it wants to stay there.

You shrink your vector by swapping it with an empy one.
Sep 23 '08 #2
JosAH
11,448 Expert 8TB
You shrink your vector by swapping it with an empy one.
And even then the memory previously allocated to the vector will not be returned
to the OS but stays part of the 'heap' owned by the process.

kind regards,

Jos
Sep 23 '08 #3
And even then the memory previously allocated to the vector will not be returned
to the OS but stays part of the 'heap' owned by the process.

kind regards,

Jos

Thank you for your valuable reply...

But we observed reduction in memory (after deletion of entries from vector) when we use vector of type "char *" (in Function()) and not in case of user defined structure "SAMPLE_TABLE_STRUCT" (in Function1()).
Why there is a difference in the two cases...?

Deepak
Sep 24 '08 #4

Sign in to post your reply or Sign up for a free account.

Similar topics

4
by: Greg Baker | last post by:
I don't know what standard protocol is in this newsgroup. Am I allowed to post code and ask for help? I hope so.. :) Here's my problem: I am trying problem 127 of the valladolid online...
10
by: Jonathan Ames | last post by:
Moving to C++ from Java, I'm still confused by some aspects of memory cleanup operations. For example, let's say I have a class MovingObject which maintains a pointer to another class...
2
by: mosfets | last post by:
Hi, I'm having a little trouble figuring out the difference in terms of memory allocation between: class person_info; class A { private:
4
by: deancoo | last post by:
I'm pretty sure that the program bellow contains a memory leak. After deleting the "hand_vector" instance, not all memory is released (only about 30%). It appears to me as though the instances of...
3
by: wolverine | last post by:
Hi Let me first of all tell that this problem is not specific to a compiler like gcc. It even comes in windows. So please dont regard the question as off topic. I am posting a code using stl. I...
18
by: happyvalley | last post by:
Hi, basically, the test function get a char pointer, and assigned a string to it. then the string is passed back by the call-by-reference mechanism. in test(), I reallocate some memory for the...
17
by: christophe.chazeau | last post by:
Hi, I have a problem with a really simple chunk of code which should work but does obviously does not. This chunk of code is just a POC aimed at finding a bug in a larger project in which the...
9
by: jeungster | last post by:
Hello, I'm trying to track down a memory issue with a C++ application that I'm working on: In a nutshell, the resident memory usage of my program continues to grow as the program runs. It...
27
by: George2 | last post by:
Hello everyone, Should I delete memory pointed by pointer a if there is bad_alloc when allocating memory in memory pointed by pointer b? I am not sure whether there will be memory leak if I do...
5
by: cham | last post by:
Hi, I am working on c++ in a linux system ( Fedora core 4 ), kernel version - 2.6.11-1.1369_FC4 gcc version - 4.0.0 20050519 ( Red Hat 4.0.0-8 ) In my code i am creating a vector to store...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.