aix使用g++編譯時一個stl string的問題
當好不容易解決了異常丟擲不捕捉等問題之後,我在aix上又碰到了新的問題,同樣的程式碼在linux下執行無誤,但在aix下,總是出現core dump,每次core dump的位置均不一樣,但是都出現在stl string相關的處理上。並且此問題大部分時候都要程式較長時間執行才會出現,大約要一個小時,處理資料10萬條以上。
花費了近一週的時間除錯和在網上查詢資料,猜測可能是由於string拷貝時的引用計數在多執行緒下出現問題,導致string在尚在使用時提前析構。於是把公司基類中封裝的字串類過載的等號由呼叫stl string的等號改為使用assign進行拷貝,經測試問題解決,程式core dump的情況消失了。
令人不解的是,仔細檢查了多執行緒的地方,併發的地方都進行了正確的加鎖,很難理解會有引用計數失效的問題,但是如果不是這樣的解釋,為什麼這樣的改動能夠解決問題?答案對我來說完全成謎了,希望有人有更好的答案。
相關推薦
aix使用g++編譯時一個stl string的問題
當好不容易解決了異常丟擲不捕捉等問題之後,我在aix上又碰到了新的問題,同樣的程式碼在linux下執行無誤,但在aix下,總是出現core dump,每次core dump的位置均不一樣,但是都出現在stl string相關的處理上。並且此問題大部分時候都要
分離式編譯時 鏈接器工具錯誤 (一個變量被定義一次或多次)
效果 include private 可讀性 con lnk2005 可能 ring 生成 在編寫程序時,將類中的函數成員的聲明和定義分開,在頭文件(.h)中進行聲明,在源文件(.cpp)中進行定義 以及具體功能的實現。達到分離式編譯的效果,提高代碼的可讀性。 自己在編寫是
【IDA】疑似發現IDA F5外掛反編譯時的一個bug
binary來自HITCON2014的stkof,反彙編其中的create函式時,發現printf函式的第三個引數識別錯了。 雖然printf的%d沒有用到第三個引數,但是按理來說,64位程式的引數傳遞順序為:rdi rsi rdx rcx r8 r9,第三個引數rdx實際上是[rbp-0x
Android在編譯和反編譯時出現error: Error: String types not allowed錯誤的解決辦法
1、在Android Project配置檔案中你使用了當前工程目標版本所沒有的特性,針對這種情況只需更改下目標版本就行了 2、apktool.jar可能不是最新的,針對這種情況下載最新版的apktool.jar就行了 3、在windows平
解決編譯時出現的警告:format string is not a string literal (potentially insecure)┊
在Xcode 4.2(iOS 5)之前,我猜大家都和我一樣很喜歡下面的除錯輸出寫法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 NSStrin
ROS知識(16)----如何編譯時自動鏈接同一個工作空間的其他包的頭文件(包含message,srv,action自動生成的頭文件)
logs package fin 空間 依賴庫 osc div build 知識 catkin_make編譯時,往往需要自動鏈接同一個工作空間的其他包的頭文件。否則會出現類似如下的錯誤: /home/xx/xx_ws/srcA_package/src/db.hpp:13:
c++編譯時打印宏定義
get 使用 path oca int 信息 編譯 efi 定義 #pragma message("this is message") #pragma message只能打印字符串,如果想打印任何宏定義可使用: #define PRINT_MACRO_
有關Fortran編譯的一個錯誤
x86_64 fit 參數 lec error define mbo jdk tmp 從來沒有用過fortran, 今天有師弟讓我幫忙跑一個fortran的程序, 我一編譯就報如下錯誤 /tmp/ccy4yDLX.o: In function `output_‘:Hjdk.
使用 gradle 在編譯時動態設置 Android resValue / BuildConfig / Manifes中<meta-data>變量的值
-m lean view data- ret post 不能 flavor ... 轉載請標明出處:http://blog.csdn.net/xx326664162/article/details/49247815 文章出自:薛瑄的博客 你也能夠
STM32初學Keil4編譯時出現 Error:Failed to execute 'BIN40/Armcc'
log cmd arm 依次 菜單 tail http ror 沒有 一種是在系統開始——運行裏輸入cmd,查看armcc狀態。詳情見推文: http://blog.csdn.net/hicui/article/details/7350805(筆記記錄,請勿見怪) 都沒有問
[ c++] cmake 編譯時 undefined reference to `std::cout' 錯誤的解決方案
bin cut () cmake fin epo linking com urn cmake .. 和 make 之後,出現如下錯誤 Linking CXX executable ../../../bin/ModuleTest CMakeFiles/Modu
使用alipaySDK編譯時找不到openssl/asn1.h文件的解決辦法
解決辦法 構建 得到 官方 paths ade 由於 證明 ipa 構建新的項目時,在重新引入alipaySDK進行編譯之後出現了一個錯誤:找不到 #include<openssl/asn1.h> 這個文件 首先排除是SDK的問題以及代碼問題.在重新翻看了官方
C語言中的編譯時分配內存
一個 地址 移植 eap 也會 功能 空間大小 全局區 限定 1.棧區(stack) --編譯器自動分配釋放,主要存放函數的參數值,局部變量值等; 2.堆區(heap) --由程序員分配釋放; 3.全局區或靜態區 --存放全局變量和靜態變量;程序結束時由系統釋放,分為全局初
webpack打包編譯時,不識別src目錄以外的js或css
default con col class 簡單的 報錯 ons src expect 前端的dva項目開發時,遇到個很郁悶的問題,用es6的語法簡單的export一個變量出來,在其他js中import使用,結果就報錯了。 export寫法如下: 1 const
IIS、Asp.net 編譯時的臨時文件路徑
訪問性 定期 找到 應用程序 生成 新版本 都是 每次 發生 IIS上部署的ASP.NET站點都會在一個.Net Framework的特定目錄下生成臨時編譯文件增加ASP.NET站點的訪問性能,有時候需要手動去刪除這些臨時編譯文件,特別是發布新版本代碼到IIS後,如果發現新
android源碼編譯時拷貝替換指定文件
android cau value 定制 部分 get android源碼 oal first 由於要做版本定制,某些版本的資源文件等(例如style.xml)需要不同的配置,但是android的編譯開關無法在xml裏使用,於是想到了編譯時根據不同的編譯開關編譯不同的文件,
linux-gcc 編譯時頭文件和庫文件搜索路徑
con 行程 efi lib local 先後 objc 路徑 oot 一、頭文件 gcc 在編譯時尋找所需要的頭文件 : ※搜尋會從-I開始 ※然後找gcc的環境變量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
分享一個 Java String split 快速分割的方法
均值 last turn ray 正則 bstr 結果 加鎖 out java中string.split() 方法比較強大,但是split()方法采用正則表達式,速度相對會慢一點, 其實大多數場景下並不需要使用正則表達式,下面分享一個不使用正則表達式分隔字符串的方法。 方法
一個關於string的區別
字符 println 機制 equal nbsp print 對象 demo string 1 public class Test01 { 2 public static void main(String[] args) { 3
javac編譯時找不到文件的問題和運行項目找不到指定類問題
文本 cnblogs 默認 cmd 目錄 技術分享 一個 空格 net 問題描述: 剛剛安裝完JDK,打開Eclipse創建一個新項目,寫了一個測試類進行輸出打印語句時,報無法找到相應類。 然後,我跑到CMD中進行javac Test.java運行測試時,報找不到對應文件。