指向struct和delete的指针 学习C++,并尝试正确理解指针,新建和删除。 关于我的问题: 我创建了一些指向结构的指针,最后删除了它们。但是堆大小并没有减少。 我搜索了一些答案,发现了以下问题。。答案中的代码似乎正确地释放了堆
我愚蠢的学习代码:指向struct和delete的指针 学习C++,并尝试正确理解指针,新建和删除。 关于我的问题: 我创建了一些指向结构的指针,最后删除了它们。但是堆大小并没有减少。 我搜索了一些答案,发现了以下问题。。答案中的代码似乎正确地释放了堆,c++,pointers,struct,C++,Pointers,Struct,我愚蠢的学习代码: #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
#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();
}
#包括
使用名称空间std;
结构日期
{
国际竞争力;
日期*下一个;
日期*prev;
};
int main()
{
daten*first=nullptr;
daten*prev=nullptr;
daten*entry=nullptr;
daten*last=nullptr;
cout-next=nullptr;
输入->上一个=空PTR;
第一个=输入;
prev=输入;
最后一次=输入;
}
其他的
{
条目=新日期n;
输入->iVal=i;
entry->next=nullptr;
输入->上一个=上一个;
上一步->下一步=输入;
prev=输入;
最后一次=输入;
}
}
cout-prev;
最后删除;
last=nullptr;
}
cout如果您想了解程序的堆使用情况,确保正确使用malloc/free和new/delete,那么您应该使用像Valgrind这样的应用程序级工具
系统级工具通常会报告为堆保留的虚拟内存量,这些虚拟内存不一定全部提交。在应用程序的生命周期内,为堆保留的虚拟内存将增加,只有在运行时决定压缩时才会定期减少。如果要了解程序的堆使用情况,请确保正确使用malloc/free和new/delete,然后,您应该使用应用程序级工具,如Valgrind
系统级工具通常会报告为堆保留的虚拟内存量,这些虚拟内存不一定全部提交。在应用程序的生存期内,为堆保留的虚拟内存将增加,只有在运行时决定压缩堆时,才会在运行时突发奇想时定期减少堆大小。您如何监控堆大小?使用Linux和KDE Systemmonitor可以显示堆大小。glibc可以随时缩小堆大小。很多时候,虚拟内存的大小就像一个高水位线,它只是指示程序一次使用的最大内存量。我不认为你的程序中有任何错误,只是glibc的一个ism。这是一个高分也是我的想法,在我的其他代码中,添加一些数据堆后,删除并添加两倍的堆到2XX,删除并创建少于2XX的堆后,堆没有加密,所以看起来是使用量最高的。但我不确定我的结构是否真的被删除了。但是在链接的示例中,堆变为4GB(不记得了),并被完全释放。这就是我担心的原因。只是想正确地理解和学习。您如何监视堆的大小?使用Linux和KDE Systemmonitor可以显示堆的大小。glibc可以随时缩小堆的大小。很多时候,虚拟内存的大小就像一个高水位线,它只是指示程序一次使用的最大内存量。我不认为你的程序中有任何错误,只是glibc的一个ism。这是一个高分也是我的想法,在我的其他代码中,添加一些数据堆后,删除并添加两倍的堆到2XX,删除并创建少于2XX的堆后,堆没有加密,所以看起来是使用量最高的。但我不确定我的结构是否真的被删除了。但是在链接的示例中,堆变为4GB(不记得了),并被完全释放。这就是我担心的原因。只是想正确地理解和学习。谢谢。看起来真是个好帮手:-)我的代码是:“总堆使用率:100000 allocs,100000 frees,2400000 bytes allocated”和“所有堆块都被释放了——不可能有泄漏”,所以看起来不错谢谢。看起来真是个好帮手:-)我的代码是:“总堆使用率:100000个alloc,100000个frees,2400000个bytes alloced”和“所有堆块都被释放了——不可能有泄漏”,所以看起来不错