468,537 Members | 1,977 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 468,537 developers. It's quick & easy.

Segmentation fault in stl_list.h

Hi Guys,

I am not sure what's wrong with my program. When I ran it under the
GDB, it shows the following messages , which said that the issue is
from stl_list.h. Does anyone know what's happening in here?

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1540594608 (LWP 1661)]
dist_obj::insert_list (this=0x82d3980, priority=23704) at
stl_list.h:116
116 { _M_node = _M_node->_M_next; }

In my dist_obj::insert_list() , it just insert an character array into
the list, and on the other thread, it gets a copy of the entire list,
then clear the list, and do some manipulation.

I also though about that if this is because of lack of memory on my
machine. I ain't sure how to check that though.

I am using GCC 3.3.3. on my FC2 machine.

Can any one please give me a helping hand? Sorry for any inconvenience.

Best wishes,

Kit

Sep 26 '06 #1
2 1879
tikcireviva wrote:
I am not sure what's wrong with my program.
We're not sure either. You can see it. We cannot.
When I ran it under the
GDB, it shows the following messages , which said that the issue is
from stl_list.h. Does anyone know what's happening in here?

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1540594608 (LWP 1661)]
dist_obj::insert_list (this=0x82d3980, priority=23704) at
stl_list.h:116
116 { _M_node = _M_node->_M_next; }
Most likely either 'this' or 'this->_M_node' is an invalid pointer.
In my dist_obj::insert_list() , it just insert an character array into
How is that character array created? Is it dynamic? Is it automatic?
the list, and on the other thread, it gets a copy of the entire list,
then clear the list, and do some manipulation.
Threading is off-topic, unfortunately. C++ assumes a single thread,
a single process, on a single processor machine. All definitions in
the language are based on that.

It is quite possible, though, that your problem is not related to
threading. Does it happen if you don't use threads? Have you actually
tried your algorithm synchronously before you introduced threads?
I also though about that if this is because of lack of memory on my
machine. I ain't sure how to check that though.
Change the test case to something smaller (if possible). Watch the
memory consumption of your process. Run it under 'valgrind' or some
other memory debugging tool. But don't spend too much time on it,
unless you actually work with rather large datasets. Most likely
your problem is elsewhere.
I am using GCC 3.3.3. on my FC2 machine.
That's irrelevant, most often. We here discuss the language, not the
environment in which it's used.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Sep 26 '06 #2
Hi Victor,

I am sorry to wrongly post this message in this news group.

Finally, I got the solution.
I've changed my stl::list from
list<pair<char *,size_t
to
list<pair<char *,size_t*>
The char buffer that I've put into the pair<char*,size_tis usually
1~2kbytes. The frequency of doing a push_back() operation is around
3000 times/sec.

Still, I don't have strong evidence why after I've changed the
pair<char*,size_tto a pointer, everything will work. Actually I do
want to drill down into the problem, may you please suggest me which
news group I should goto?

I am so sorry for any inconvenience again.

Best regards,

Kit.

Victor Bazarov 寫道:
tikcireviva wrote:
I am not sure what's wrong with my program.

We're not sure either. You can see it. We cannot.
When I ran it under the
GDB, it shows the following messages , which said that the issue is
from stl_list.h. Does anyone know what's happening in here?

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 1540594608 (LWP 1661)]
dist_obj::insert_list (this=0x82d3980, priority=23704) at
stl_list.h:116
116 { _M_node = _M_node->_M_next; }

Most likely either 'this' or 'this->_M_node' is an invalid pointer.
In my dist_obj::insert_list() , it just insert an character array into

How is that character array created? Is it dynamic? Is it automatic?
the list, and on the other thread, it gets a copy of the entire list,
then clear the list, and do some manipulation.

Threading is off-topic, unfortunately. C++ assumes a single thread,
a single process, on a single processor machine. All definitions in
the language are based on that.

It is quite possible, though, that your problem is not related to
threading. Does it happen if you don't use threads? Have you actually
tried your algorithm synchronously before you introduced threads?
I also though about that if this is because of lack of memory on my
machine. I ain't sure how to check that though.

Change the test case to something smaller (if possible). Watch the
memory consumption of your process. Run it under 'valgrind' or some
other memory debugging tool. But don't spend too much time on it,
unless you actually work with rather large datasets. Most likely
your problem is elsewhere.
I am using GCC 3.3.3. on my FC2 machine.

That's irrelevant, most often. We here discuss the language, not the
environment in which it's used.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Sep 27 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by sivignon | last post: by
3 posts views Thread by diyanat | last post: by
5 posts views Thread by Fra-it | last post: by
18 posts views Thread by Digital Puer | last post: by
27 posts views Thread by Paminu | last post: by
7 posts views Thread by pycraze | last post: by
3 posts views Thread by madunix | last post: by
6 posts views Thread by DanielJohnson | last post: by
reply views Thread by NPC403 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.