beginthread傳遞引數時容易犯的錯誤

2021-09-30 06:48:50 字數 514 閱讀 7268

下面的程式你能看出來**有問題嗎?

在某些情況下,trace出來的語句可能沒有檔名。

原因很簡單,有些人可能已經看出來了。這個問題也是我剛開始做多執行緒開發時常遇到的問題。

由於myfun中的wszfilename字串為臨時變數,因此該字串在myfun返回後即被釋放。所以,對於執行緒函式中的語句    wcscpy_s(wszfilename, max_path, (wchar *)parguments); , 在執行這句之前,myfun函式可能已經返回,此時parguments所指向的記憶體已經無效,也就得不到檔名了。

這個錯誤是由於多執行緒的特性導致的,在單執行緒中,myfun一定是在threadfun返回才返回的,所以就沒有這個問題,而初學多執行緒的人忘記考慮了這點,因此可能會犯錯。

staticwchar wszfilename[max_path] = l"c:";

這樣即保證了變數的區域性性,也不會在函式退出後釋放該變數。

執行緒學習一 beginthread

重點內容 reinterpret cast 兩個不相干的型別轉換 型別 變數名 重要看msdn 關於函式的解釋 無引數執行緒函式 void fun int tmain int argc,tchar argv 帶引數的執行緒函式很簡單效果一樣 1 100 遍歷 void fun int num int...

python 引數傳遞 Python 引數傳遞

python中的變數 乙個變數是區域性還是全域性,在編譯函式的時候就已經決定,因此讀變數值的時候也不會逐層向外查詢。變數是全域性還是局域,根據如下3條 1.如果函式內部有global語句,那麼它宣告的變數是全域性的。2.如果函式內部有對變數的賦值語句,那麼它是局域的。3.除此之外都是全域性的。注意1...

python 引數傳遞 python引數傳遞

python中函式引數的傳遞是通過 賦值 來傳遞的。但這條規則只回答了函式引數傳遞的 戰略問題 並沒有回答 戰術問題 也就說沒有回答怎麼賦值的問題。函式引數的使用可以分為兩個方面,一是函式引數如何定義,二是函式在呼叫時的引數如何解析的。而後者又是由前者決定的。函式引數的定義有四種形式 1.f arg...