基本线程导致malloc():内存损坏:

时间:2014-08-08 13:06:34

标签: c++ multithreading stdthread

我有一个带有简单线程指针的类,我用它来从构造函数的新线程中启动一个函数。

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。 我做错了什么?

1 个答案:

答案 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;
  }
}