指向结构和删除的指针
Pointer to struct and delete
只是学习C++并尝试正确理解指针、new和delete。关于我的问题:我创建了一些指向结构的指针,最后我删除了它们。但是堆大小并没有减少。我搜索了一些答案,发现了以下问题。C++删除不会释放所有内存(Windows)。答案中的代码似乎正确地释放了堆。
我愚蠢的学习代码:
#include <iostream>
using namespace std;
struct daten
{
int iVal;
daten *next;
daten *prev;
};
int main()
{
daten *first=nullptr;
daten *prev=nullptr;
daten *entry=nullptr;
daten *last=nullptr;
cout << "[Any Key] FILL";
getchar();
//fill
for( int i=0;i<100000;i++)
{
if(!entry)
{
entry=new daten;
entry->iVal=i;
entry->next=nullptr;
entry->prev=nullptr;
first=entry;
prev=entry;
last=entry;
}
else
{
entry=new daten;
entry->iVal=i;
entry->next=nullptr;
entry->prev=prev;
prev->next=entry;
prev=entry;
last=entry;
}
}
cout << "[Any Key] DELETE";
getchar();
//delete
prev=last;
while(prev)
{
last=prev;
prev=prev->prev;
delete last;
last=nullptr;
}
cout << "[Any Key] END";
getchar();
}
我有一个更复杂的代码,我可以在其中作为链表插入/删除/导航,只是为了确保我创建了100000个这样的条目,但删除后堆不会减少。你能告诉我我的错误在哪里吗?
如果你想了解程序的堆使用情况,并确保正确使用malloc/free和new/delete,那么你应该使用像Valgrind Memcheck这样的应用程序级工具。
系统级工具通常会报告为堆保留的虚拟内存量,这些虚拟内存并不一定全部提交。为堆保留的虚拟内存在应用程序的生命周期内会增加,只有在运行时决定压缩时才会周期性地减少。
相关文章:
- 使用函数引用指向节点的指针删除链表中的节点?
- 如何通过指向元组的共享指针删除对象
- 函数内的 C++ 指针删除
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何通过存储在 std::list 中的指针删除对象?
- C++中的智能指针删除
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 提升属性树:使用指向节点及其父节点的指针删除节点
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- C++ Valgrind 双指针删除,用于防止内存泄漏
- C 通过指向其基类的指针删除派生对象
- 将指针删除到数组
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- 智能指针删除器和"using"名称为"pointer"关键字
- 通过指向其基的指针删除 POD 对象是否安全
- 模板化的出列无效指针:删除类时失败
- 使用"this"指针删除
- (C++) list.error 方法和使用指针删除内存