class MyClass{
public:
MyClass() {}
virtual ~MyClass() {}
};
extern "C" int foo(int tryNumber)
{
std::tr1::shared_ptr<MyClass> myClass(new MyClass());
std::cout << "Object has been created " << tryNumber << << std::endl;
return 0;
}
然后在我的程序中的某处写道:
for (int i = 0; i < 10000; ++i){
foo(i);
}
有事实:
1)gcc 4.0.1,我还不能更新它们。所以当我实现std::tr1::shared_ptr
时,我看到编译器使用boost / shared_ptr.hpp(boost 1.33.1)
2)好吧,该程序使用了许多线程,我甚至不知道他们是如何工作的以及他们完全做了什么(我工作中的大项目),但我知道,我不知道使用任何可能导致此行为的共享变量或其他内容
3)有时只会打印出来:
对象已创建0
对象已创建1
...
对象已创建9999
一切都很好
有时会打印0-1-2-3-4(或更多)行,然后停止。此外 - 我知道,对象已经创建,但函数没有返回值,程序只是冻结,当我尝试使用gdb附加到程序并键入&#34;其中&#34; - 我明白了:
__kernel_vsyscall()中的0)0xb7fd8430
1)来自/lib/i686/libpthread.so.0的_lll_mutex_lock-wait()中的0xb7d9bece
2)来自/lib/i686/libpthread.so.0的_L_mutex_lock_71()中的0xb7d98500
3)0xbfbefab8在? ()
4)0x00000000 in ?? ()
或者这个:
__kernel_vsyscall()中的0)0xb7fd8430
1)来自/lib/i686/libpthread.so.0的_lll_mutex_lock-wait()中的0xb7d9bece
2)来自/lib/i686/libpthread.so.0的_L_mutex_lock_71()中的0xb7d98500
..不知道这里有什么,我只看到&#34; ..在??? ()&#34;
10)..在__gthread_mutex_lock
中11)..在__gthread_mutex_lock
中12)..在std :: tr1 :: _ Sp_counted_base :: release
13)..在~shared_count
14)..在~shared_ptr
中似乎shared_ptr
已损坏?
答案 0 :(得分:1)
我刚刚解决了这个问题。改变了这个:
#include <tr1/memory>
至#include <boost/shared_ptr.hpp>
std::tr1::shared_ptr
至boost::shared_ptr
此处描述了解决方案link