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/)。在這種情況下它可能會幫助你。 –