1. 程式人生 > >aix使用g++編譯時一個stl string的問題

aix使用g++編譯時一個stl string的問題

        當好不容易解決了異常丟擲不捕捉等問題之後,我在aix上又碰到了新的問題,同樣的程式碼在linux下執行無誤,但在aix下,總是出現core dump,每次core dump的位置均不一樣,但是都出現在stl string相關的處理上。並且此問題大部分時候都要程式較長時間執行才會出現,大約要一個小時,處理資料10萬條以上。

        花費了近一週的時間除錯和在網上查詢資料,猜測可能是由於string拷貝時的引用計數在多執行緒下出現問題,導致string在尚在使用時提前析構。於是把公司基類中封裝的字串類過載的等號由呼叫stl string的等號改為使用assign進行拷貝,經測試問題解決,程式core dump的情況消失了。

        令人不解的是,仔細檢查了多執行緒的地方,併發的地方都進行了正確的加鎖,很難理解會有引用計數失效的問題,但是如果不是這樣的解釋,為什麼這樣的改動能夠解決問題?答案對我來說完全成謎了,希望有人有更好的答案。