so庫中使用執行緒導致的變數被更改問題

2021-09-19 09:58:25 字數 479 閱讀 4966

前些天編寫程式時,是編寫的so庫函式,編寫乙個例子:

void pthread_main(void *arg)

int tap_init()

這是只是個例子用來說明情況,將tap_init做成so庫使用,當有程式呼叫該庫的tap_init時,執行緒裡列印的ar**有時會被莫名的修改掉內容,或者出現段錯誤,引起這個現象的原因是因為這裡傳入給執行緒的ar**是個區域性變數,在tap_init完成後ar**的記憶體會被釋放掉,所以會出現的問題,**修改:

char ar** = "1231242353";

該為:char *ar** = malloc(szieof(20));

memcpy(ar**, "1231242353", 10);

ar**[10] = 0;

使用malloc後或者使用全域性變數後問題解決,但是不太建議使用全域性變數

cmake中使用so庫

cmake minimum required version 2.0 project cmaketest 標頭檔案搜尋路徑 include directories home user cvcode slambook ch2 庫檔案搜尋路徑 link directories home user cvc...

多執行緒中使用fork 導致分頁

最近和同事一起處理了乙個 fuse 的大bug 首先看堆疊 core was generated by sf cluster bin pmxcfs program terminated with signal sigabrt,aborted.0 0x00007f2debdcc475 in raise...

JNI 在c中使用log 和生成so庫

ndk配置ldlibs log z m ndk sourcesets abifilters 指定生成哪幾種.so檔案 sourceset配置生成.so檔案的位置 使用.so檔案 c已經編譯成.so檔案的情況下,將生成的.so檔案複製到專案的libs目錄下,然後刪除jni檔案下面的檔案,再執行的時候你...