C++ 在c+中删除+;程序没有释放内存

C++ 在c+中删除+;程序没有释放内存,c++,memory-management,memory-leaks,valgrind,delete-operator,C++,Memory Management,Memory Leaks,Valgrind,Delete Operator,我创建了一个几乎没有整数变量的对象,还有一个char内存块,比如说,它被分配了300-500字节的内存作为其成员。在这之后,这个对象被一个线程推入向量,然后另一个并行运行的线程将与一个空向量交换并开始处理包含该对象的向量,在处理之后,我用来删除对象中使用的char块,并最终确定该对象并删除该对象。但似乎记忆并没有释放出来。我用valgrind工具运行了这段代码,它没有显示任何泄漏。请帮我解决这个问题 但似乎记忆并没有释放出来 你是怎么确定的?我想错了。调用delete which将该内存标记为已

我创建了一个几乎没有整数变量的对象,还有一个char内存块,比如说,它被分配了300-500字节的内存作为其成员。在这之后,这个对象被一个线程推入向量,然后另一个并行运行的线程将与一个空向量交换并开始处理包含该对象的向量,在处理之后,我用来删除对象中使用的char块,并最终确定该对象并删除该对象。但似乎记忆并没有释放出来。我用valgrind工具运行了这段代码,它没有显示任何泄漏。请帮我解决这个问题

但似乎记忆并没有释放出来

你是怎么确定的?我想错了。调用
delete which
将该内存标记为已解除分配且可供将来使用。语言没有明确说明这意味着什么。你的操作系统比你更擅长管理内存。例如,它不会被迫确保您用来测量内存使用情况的任何工具(任务管理器?)现在都可以看到X个更多的可用字节


您使用的内存现在可以重新分配。这就是你需要关注的,让操作系统的内存管理器来关注细节。

如果你在valgrind中运行它,但它没有显示任何内存泄漏,那么为什么你会认为你正在泄漏内存?这个假设的基础是什么?顺便说一句,
delete
不会释放任何内存,它会将内存块标记为空闲,以便重新利用。一旦程序执行完成,该应用程序使用的内存不会下降。i、 例如,当通过运行top命令执行程序时,我发现我编写的应用程序在执行后使用500 MB的RAM一次,它应该会正常运行,但它没有这样做,因为您似乎正在使用任务管理器跟踪内存使用情况。它实际上不起作用&不是跟踪内存泄漏的正确方法。如果valgrind报告没有内存泄漏,请确保您没有内存泄漏。可能的