【发布时间】:2015-03-21 16:06:43
【问题描述】:
我编写了一个程序,它分配内存并计算最低地址和最高指针之间的大小。 我对结果感到惊讶。当我启动它时,它需要 20mb 的内存,40、60 ... 200、220、240、... 3000mb、3020mb,然后突然爆炸,262000mb,等等。 谁能解释一下为什么?
#include <iostream>
using namespace std;
int aaa;
int *max1=&aaa;
int *min1=&aaa;
void results(){
cout<<"min "<<min1<<endl;
cout<<"max "<<max1<<endl;
double mln= 1e6;
cout<<"min-max= "<<(max1-min1)/(1024*1024)<<"mb"<<endl;
}
void logic(int *c){
if(c>max1){
max1=c;
}
if(c<min1){
min1=c;
}
static int i;
i++;
if(i%800==0)
results();
}
int main(){
int *x;
int l=0;
while(l<=500000000){
l++;
x=new int[20000];
logic(&x[19999]);
}
}
【问题讨论】:
-
您的程序存在内存泄漏。你从来没有在你用于
new[]的内存上调用delete[]。 -
@PaulMcKenzie:这显然是我们想要的。
-
并且显示的消息“min-max=”应该更正为“max-min=”。
-
如果您可以包含硬盘/固态磁盘驱动器的容量,这将有很大帮助。
标签: c++ operating-system