0
#include <iostream>
#include <boost/thread/thread.hpp>
#include <malloc.h>

class callable {
  public:
    void operator()() {
      std::cout << "Thread Run" << std::endl;
    }
}

void run() {
  callable c;
  boost::thread t(boost::ref(c));
  t.join();
}

int main() {
  int alloc = mallinfo().uordblks;
  run();
  int leaked = mallinfo().uordblks - alloc;
  if(leaked)
    std::cout << "mem leak: " << leaked << std::endl;
  return 0;
}

它确实在屏幕上打印“mem leak: 336”,有人可以解释为什么吗?我希望“泄漏”为0。

4

1 回答 1

0

在具有 32 位 C int 类型的 64 位系统上,struct mallinfo 中的 int 字段可能会溢出并环绕为小值或负值,或者希望上限为 INT_MAX。这是一个已知的 C 库问题,Devel::Mallinfo 不会尝试对此做任何事情。请检查以下链接:

http://metacpan.org/pod/Devel::Mallinfo

我会建议你使用 POSIX 或 C 标准接受的其他函数。

于 2013-07-28T13:34:01.327 回答