0

我最近开始使用 clang 和 XCode 12 在 mac 上进行 C++11 开发,我真的很想更好地了解这个平台。

我正在测试在“空”C++ 程序中重载全局newdelete运算符,但我注意到使用全局替换运算符进行的 89new个分配没有通过全局替换运算符解除分配delete,这看起来像是内存泄漏。(也许不是,但为什么呢?)

在调试程序时,我发现这些分配都来自wireless_diagnostics::google::protobuf。

所以我的问题是:

  • 什么是 Google protobuf,为什么它会出现在我的程序中?
  • 为什么它会留下这些内存泄漏(或似乎是内存泄漏)?
  • 有什么可做的吗?

这是代码:

#include <iostream>

size_t allocations = 0;

void* operator new(size_t size)
{
   void* ptr = malloc(size);
   if (!ptr) throw std::bad_alloc{};
   allocations++;
   return ptr;
}

void operator delete(void* ptr) noexcept
{
   free(ptr);
   allocations--;
}

int main(int argc, const char * argv[])
{
   std::cout << allocations << std::endl;
   return 0;
}
4

1 回答 1

0

(不能发表评论,所以发布为答案)

什么是 Google protobuf,为什么它会出现在我的程序中

我已将 google protobuf 用于序列化目的。这就像压缩数据(结构化),因此我们不必通过线路发送大量数据。

我不明白为什么它会出现在你的程序中。从长远来看,它可能与您的调试器有关?似乎正在完成无线诊断,所以我只能认为调试器正在这样做

你能分享一些调试器输出的截图或任何东西吗?这可能会更清楚地说明它。

于 2021-10-04T10:46:08.920 回答