endthreadex記憶體洩露的問題

2021-09-30 08:22:05 字數 2261 閱讀 7188

☆──────────────────────────────────────☆

yixin (@_@)

於 2023年09月18日11:00:47 星期五)

提到:**:

#include

#include

#include

#include

using namespace std;

//#include

unsigned __stdcall th_threada()

int main()

}這裡如果顯式呼叫_endthreadex則string會洩露,如果直接return則不會

但是為什麼網上的示例**包括msdn都顯示呼叫_endthreadex

並且說這樣可以防止記憶體洩露?

☆──────────────────────────────────────☆

enjoysoft (enjoysoft inc.)

於 2023年09月18日15:35:55 星期五

提到:好問題!

std::string的資源釋放是由析構函式進行的,c++會保證

但是析構函式是在return 以後發生的

這個**return語句永遠不會被執行,因為endthreadex的存在,和exit是類似的

不寫endthreadex你的執行緒也能正確退出

所以如果不是提前退出的話,你可以不寫endthreadex,函式返回後系統會呼叫endthrea

dex的,參見《windows核心程式設計》

如果你要提前退出的話,請使用大括號:

// a released here

_endthreadex(0);

【 在 yixin (@_@) 的大作中提到: 】

: **:

: #include

: #include

: #include

: #include

: using namespace std;

: //#include

: unsigned __stdcall th_threada()

: // a released here

: _endthreadex(0);

: (以下引言省略...)

☆──────────────────────────────────────☆

dog (@_@)

於 2023年09月18日21:25:42 星期五

提到:應該是的吧,看msdn上也沒說有呼叫的必要,return的時候會自動呼叫_endthreadex如

果你是 _beginthreadex建立的話

呼叫_endthreadex是必須的,但不是指顯示呼叫,這是我對msdn有關說明的理解。

所謂必須是清理_beginthreadex為thread建立的tiddata。

【 在 yixin (@_@) 的大作中提到: 】

: 那既然任何需要退出的地方都能用return完成

: 是不是endthreadex就沒有顯式呼叫的意義了?

: .................(以下省略)

☆──────────────────────────────────────☆

yixin (@_@)

於 2023年09月18日21:32:18 星期五

提到:了解

thx只是以前看示例**都是顯示呼叫的

【 在 dog (@_@) 的大作中提到: 】

: 應該是的吧,看msdn上也沒說有呼叫的必要,return的時候會自動呼叫_endthreadex如

: 果你是 _beginthreadex建立的話

: 呼叫_endthreadex是必須的,但不是指顯示呼叫,這是我對msdn有關說明的理解。

: 所謂必須是清理_beginthreadex為thread建立的tiddata。

☆──────────────────────────────────────☆

dog (@_@)

於 2023年09月18日21:34:42 星期五

提到:好處沒看到,

倒是看到板主說的那些了。。msdn上圈起來突出顯示的。。

【 在 yixin (@_@) 的大作中提到: 】

: 了解

: thx

: 只是以前看示例**都是顯示呼叫的

☆──────────────────────────────────────☆

enjoysoft (enjoysoft inc.) 於

**:

記憶體洩露檢測

c 中檢測記憶體洩漏可以引入系統定義的巨集來檢視,內存在哪個位置洩漏 檔案開始處加入下列定義 define crtdbg map alloc include include 程式退出時加入以下函式 crtdumpmemoryleaks 如果有洩漏會顯示 記憶體洩漏是程式設計中常常見到的乙個問題,我所...

檢測記憶體洩露

程式結束時,作業系統會 程式占用的資源.但是,只要程式還在執行,如果不進行清理,資源最終可能被耗盡.1.vc記憶體洩露檢查工具 visual leak detector 現在已知的最新有2.0版本的,使方法不詳。使用 visual leak detector 2.2.3 在vs工程的linker i...

記憶體洩露檢測

1 包含標頭檔案 include include 2 每個cpp檔案包含 static char this file file define new new normal block,this file,line 3 設定標誌 int tmpdbgflag tmpdbgflag crtsetdbgf...