heap corruption problem in singleton class

V

venkatarao0

Hi all,

Here one tricky issue, In my project I have used a singleton class
used to store data and value info. this information I will use(call
after system up) 4 times in a year and depends on the requirement not
frequently. In rare scenario while calling get member function I am
getting the exception my system is going down(core dump). I
reproduced the issue bye corrupting the ms_ptr pointer pointing to the
memory location(in Vxworks 6.7 facility is there) bye manually after
some time(not immediately) I generated a scenario to call this
singleton class member function I got the same core dump. This same
issue I reproduced by ms_ptr pointing to invalid location.

class config_data
{
public:
typedef config_data this_t;
typedef map<char*, int> input_data;
static this_t& instance ();

void set (const input_data& inData);
private:
static this_t* ms_ptr;
// Constructor
config_data () {}
// GET method
int get (const char *inName, const int inValue);

// Cannot copy a singleton
config_data(const this_t&);
this_t& operator= (const this_t&);
};

config_data* config_data::ms_ptr(NULL);
config_data& config_data::instance ()
{
if (!ms_ptr)
{
ms_ptr = new config_data;
}
return *ms_ptr;
}
set & get used to set the values into map and getting the values from
map. there is iterator problem over here I have not used iterator in
get also.

can any one please help me to fix this problem.

1) I want to know who is corrupting the heap location fist to fix the
problem. How I come to know while corrupting the heap memory itself
there is any mechanism to protect/ raise an exception while corrupting
the memory itself.
 
V

venkatarao0

What do you mean? The core dump file was byte-by-byte identical to the
first core dump file?

here the dump is the stack, it will show when and where the exception
happen this case it is showing the function which is trying to calling
the singleton member function. the core dump is byte by byte only I
use the *.elf file used to see the in where this core dump happen.
Using 'char*' here seems error-prone, suggesting std::string instead.

yes here I am using string only I have taken care for NULL termination
also.
If yoy think the error appeared in the get() method it would have been
wise to include its definition, and maybe also an example of how you call
it.
Initially while device up time this get() member function using there
we are not facing the problem.

int get(string)
{
int val=0;
if(input_data.find(string)== input_data.end())
{
// insert new string to input_data;
}
else
{
// val=input_data.second; getting the second value
}
return val;
}
Run your code with valgrind, this is a good tool for finding out memory
access errors.

I dont know how to use valgrind. I am running this code in VxWorks 6.7
RTOS on PowerPC 8560. if u have any more suggestions please reply
back.

In VxWorks we can protect the 4k bytes of memory but I cont effort 4k
instead of 12 bytes.
hth
Paavo

Thanx for your reply Paavo.

I am interested to know how is corrupting the memory & I want to
raise the exception at the time of memory corruption Then I can give
instrumentation fix to find the culprit.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top