c++ - 声明字符串时内存泄漏
问题描述
我正在开发一个需要 0 个内存泄漏的 C++ 控制台应用程序。但是,我对内存泄漏非常陌生,我想知道为什么这已经导致内存泄漏,而几乎没有任何代码:
int main()
{
std::string httpResult;
_CrtDumpMemoryLeaks();
return 0;
}
这是 VS 2019 中给定的内存泄漏:
Detected memory leaks!
Dumping objects ->
{93} normal block at 0x00000146FEB63BD0, 16 bytes long.
Data: <x > 78 FB 15 D6 13 00 00 00 00 00 00 00 00 00 00 00
Object dump complete.
我唯一要做的就是声明一个 std::string。为什么这是内存泄漏?
解决方案
考虑一下:
int main()
{
std::string httpResult;
_CrtDumpMemoryLeaks();
std::abort();
return 0;
}
此代码存在内存泄漏,因为在调用abort
具有自动存储持续时间的对象的析构函数时不会被调用。_CrtDumpMemoryLeaks();
无法提前知道调用后资源是否会被清理。此代码中没有内存泄漏
int main()
{
{
std::string httpResult;
}
_CrtDumpMemoryLeaks();
return 0;
}
(并且_CrtDumpMemoryLeaks();
没有看到任何内存泄漏的候选者。)