我有一个带有简单线程指针的类,我用它来从构造函数的新线程中启动一个函数。
class Tty {
public:
Tty();
private:
void foo();
std::thread tFoo;
};
using namespace std;
Tty::Tty() {
tFoo = thread(&Tty::foo, this);
}
void Tty::foo() {
cout << "test";
}
我的主要人物可以恢复原状:
int main(int argc, char** argv) {
Tty* tty = new Tty();
while (!exitCheck());
}
但是当我运行这段代码时,我在运行时遇到了这个错误:malloc(): memory corruption: 0x000000000133c170
。
我做错了什么?
答案 0 :(得分:1)
我更正了你的样本,修复了缺少thread :: join。如果您不想关心thread :: join - 那么您可以使用detach()。
#include <thread>
#include <iostream>
#include <system_error>
struct Tty
{
Tty();
~Tty();
private:
void foo();
std::thread _tFoo;
};
Tty::Tty()
: _tFoo(&Tty::foo, this)
{
}
Tty::~Tty()
{
_tFoo.join();
}
void
Tty::foo()
{
std::cout << "test" << std::endl;
}
int
main()
{
try
{
Tty t;
}
catch (const std::system_error& e)
{
std::cerr << e.code() << ", " << e.what() << std::endl;
}
catch (const std::exception& e)
{
std::cerr << e.what() << std::endl;
}
catch (...)
{
std::cerr << "Unknown exception" << std::endl;
}
}