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 附加到程序并键入“where”时 - 我看到了这个:
0) __kernel_vsyscall () 中的 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 在?? ()
或这个:
0) __kernel_vsyscall () 中的 0xb7fd8430
1) 来自 /lib/i686/libpthread.so.0 的 _lll_mutex_lock-wait() 中的 0xb7d9bece
2) 来自/lib/i686/libpthread.so.0的_L_mutex_lock_71()中的0xb7d98500
..不知道这里有什么,我只看到“.. in ?? ()”
10) .. 在 __gthread_mutex_lock
11) .. 在 __gthread_mutex_lock
12) .. 在 std::tr1::_Sp_counted_base::release
13) .. 在 ~shared_count
14) .. 在 ~shared_ptr
好像shared_ptr
坏掉了?