【发布时间】:2020-10-20 19:06:42
【问题描述】:
我正在做一个项目,需要一个字符缓冲区来通过网络发送一个结构。我正在使用:
char* buf = new char[sizeof(obj)];
后来,有人告诉我,如果我这样做而不删除,我会泄漏内存。我用 Visual Studio 2017 Professional 调试了我的程序,我的内存一直保持不变,无论我创建这个缓冲区多少次。
我的问题是:C++17 是否修复了“new”运算符可能导致的内存泄漏问题,或者这是我正在使用的编译器特有的问题?提前致谢!
【问题讨论】:
-
你没有泄露内存,你泄露了地址空间。如果您想泄漏内存,请尝试
for(;;) new char; -
顺便说一句,这不是错误,因此不涉及“修复”。
-
@Joshua 以前从未听说过“泄露的地址空间”这个词,这是什么意思?对我来说,这看起来像是经常性的内存泄漏。
-
@HolyBlackCat:如果您分配大块而不写入它,则实际上还没有分配内存,只有地址空间。大块由内存映射分配。
-
@HolyBlackCat 据我所知,两者在 C++ 中没有区别。据我了解,在第一次写入之前不提交内存的平台上可能存在差异。因此,在您尝试访问该对象之前,该地址将被保留,但尚未将其内存提交给您的进程。这些平台与 C++ 不兼容,但假装不兼容。
标签: c++ c++17 new-operator