1. 程式人生 > >AIX使用g++編譯的程式使用異常時的問題

AIX使用g++編譯的程式使用異常時的問題

     繼解決了aix上各種奇怪的缺少編譯選項導致的問題之後,我又碰到了新的問題。

     程式在不斷丟擲異常的情況,程式不是很穩定。我使用了一個string來儲存異常的資訊,然而在實際執行中發現,經過多次異常丟擲(有時侯需要很多)後,會出現該string有奇怪的表現。比如說,在重新丟擲異常進行拷貝的時候,string的引用變為NULL;或者在打出異常資訊的時候,string的引用變為NULL。

     工期緊的情況下面對這樣的問題是比較讓人鬱悶的,因為對異常機制的不瞭解,我只能繼續撞大運程式設計(我討厭這麼做,只能說是病急亂投醫)。考慮到程式另一個丟擲異常的地方從來沒出錯過,而那裡丟擲的異常是otl的異常,otl使用了char陣列來記錄異常資訊。所以我猜測,aix上g++所實現的異常機制,在多執行緒情況,如果存在動態記憶體分配(stl string),會存在缺陷。

     我做出撞大運的改動,將基類中的異常類記錄異常資訊的成員變數由string改為char陣列。結果,經過3天的測試,前面的問題不再出現,程式執行正常穩定。