[英]C++ Stack around variable is corrupted
我正在嘗試實現一個計時器,該計時器將函數指針作為參數和以毫秒為單位的時間。 時間過去之后,應在單獨的線程中調用該函數。 該代碼如下所示:
class timer
{
public:
void schedule(void(*function)(), int time)
{
std::thread t = std::thread([&]
{
std::this_thread::sleep_for(std::chrono::milliseconds(time));
function();
});
t.detach();
}
};
主要方法如下:
#define LOG(x) std::cout << x << std::endl;
timer t1;
timer t2;
timer t3;
t1.schedule([] {LOG("t1 done")}, 2000);
t2.schedule([] {LOG("t2 done")}, 3000);
t3.schedule([] {LOG("t3 done")}, 4000);
std::this_thread::sleep_for(std::chrono::seconds(20));
異常如下:
Run-Time Check Failure #2 - Stack around the variable 't1' was corrupted.
這里的問題是您正在通過lambda中的引用來捕獲。 這意味着您可以在調用lambda的operator()
之前調用detach
並退出schedule
。 如果發生這種情況,那么當您嘗試使用time
您將訪問懸掛的參考。
解決方案是按值捕獲。 這意味着您將獲得一份副本,而調用operator()
則無所謂,因為lambda並不依賴任何東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.