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;
}
然后在某处我的节目,我写:升压shared_ptr的问题
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附加到程序并输入“where”时 - 我看到:
0)0xb7fd8430在__kernel_vsyscall()
1)从/lib/i686/libpthread.so.0
2)0xb7d98500在_L_mutex_lock_71(在_lll_mutex_lock - 等待()0xb7d9bece)从/ LIB/i686的/的libpthread。 so.0
3)0xbfbefab8在? ()
4)0x00000000在?? ()
或者这样:
0)__kernel_vsyscall()0xb7fd8430
1)从/lib/i686/libpthread.so.0在_lll_mutex_lock - 等待()0xb7d9bece
2)从/lib/i686/libpthread.so.0
0xb7d98500在_L_mutex_lock_71()..dunno是什么在这里,我看到的只有 “..在??()”
10)。在__gthread_mutex_lock
11)..在__gthread_mutex_lock
12)..在标准:: TR1 :: _ Sp_counted_base ::释放
13)..在〜SHARED_COUNT
14)..in〜shared_ptr
看起来像shared_ptr
坏了?
我猜想,你做别的东西,你下来告诉我们,那搅乱堆栈,可能会发生某种未定义的行为。您向我们展示的代码不足以帮助您解决问题。 –
@Joachim Pileborg相信我,我没有做别的。这是一个大型项目,我正在编辑一个本地代码。我几天前遇到了这个问题[链接](http://stackoverflow.com/questions/19585236/the-exception-isnt-captured-by-catch-block),所以我试图找出问题,并且这个主题描述我发现了什么(在shared_ptr添加后发生问题) –
使用某种内存调试器,如[Valgrind](http://valgrind.org/)。在这种情况下它可能会帮助你。 –