我对这个简单的代码感到非常困惑。 为什么这段代码可以释放分配的内存。
double *a;
for(int i = 0 ; i < 1000000 ; i++)
{
if(1){
a = new double ;
}
if(1){
delete a;
}
}
但是此代码无法删除分配的所有内存。
std::vector<double *>rubberList ;
for(int i = 0 ; i < 1000000 ; i++)
{
rubberList.push_back(new double);
//delete rubberList[i];
}
for(unsigned long j = 0 ; j < 1000000 ; j++)
{
delete rubberList.at(j);
}
,并且在分配器块中删除项目时,会正确删除内存。
for(int i = 0 ; i < 1000000 ; i++)
{
rubberList.push_back(new double);
delete rubberList[i];
}
tnx
答案 0 :(得分:0)
您发布的中间示例确实释放了所有内存。为了获得更多证据,我编译了您的代码,并使用words = str(input("Enter a word")) #Coal
for word in words:
if word !=''.join(sorted(word)):
print("Letters not in alphabetical order")
else:
print("Letters are in alphabetical order")
运行了该代码:
== 5829 == Memcheck,内存错误检测器
== 5829 ==版权所有(C)2002-2017,由Julian Seward等人使用GNU GPL。
== 5829 ==使用Valgrind-3.13.0和LibVEX;使用-h重新运行以获取版权信息
== 5829 ==命令:测试
== 5829 ==
== 5829 ==
== 5829 ==堆摘要:
== 5829 ==在出口处使用:0字节,0块中
== 5829 ==堆总使用量:30个分配,30个空闲,分配的4,065个字节
== 5829 ==
== 5829 == 所有堆块均已释放-不可能泄漏
== 5829 ==
== 5829 ==对于检测到和抑制的错误的计数,请重新运行:-v
== 5829 ==错误摘要:0个上下文中存在0个错误(禁止:0个上下文中有0个)
您发布的代码不会清除内存。唯一不同的是,可能会使用更多的内存,因为您在中间的一个双打中分配了一吨的双打,而在第一个中一次只分配了一个双打。
您在哪里证明它不会删除内存?还是您还有其他意思?