1
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坏掉了?

4

1 回答 1

1

我刚刚解决了这个问题。改变了这个:

#include <tr1/memory>#include <boost/shared_ptr.hpp>

std::tr1::shared_ptrboost::shared_ptr

解决方案在此处描述链接

于 2013-10-29T12:12:01.027 回答