首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么小弟我的程序的动态数组输入2万5个数据会内存泄露?还有另一个程序测试运行时间有点有关问题

2012-06-16 
为什么我的程序的动态数组输入2万5个数据会内存泄露?还有另一个程序测试运行时间有点问题原代码#includei

为什么我的程序的动态数组输入2万5个数据会内存泄露?还有另一个程序测试运行时间有点问题
原代码

#include<iostream>
#include"time.h"
using namespace std;

void merge(int A[],int low,int mid,int high,int n)
{
int *B=new int[n];
int l=low;int m=mid+1;int k=low;
while(l<=mid&&m<=high)
{
if(A[l]<=A[m])
{
B[k]=A[l];
l++;
}
else
{
B[k]=A[m];
m++;
}
k++;
}
if(l==mid+1)
while(k<=high)
{
B[k]=A[m];
k++;m++;
}
else
while(k<=high)
{
B[k]=A[l];
k++;l++;
}
for(int i=low;i<=high;i++)
{
A[i]=B[i];
}
};

void mergesort(int A[],int low,int high,int n)
{
if(low<high)
{
int mid=(low+high)/2;
mergesort(A,low,mid,n);
mergesort(A,mid+1,high,n);
merge(A,low,mid,high,n);
}
};

void main()
{
srand(time(NULL));
int i,j;
double Time;
for(i=1;i<=5;i++)
{
int *A=new int[5000*i];
for(j=0;j<(5000*i);j++)
A[j]=rand()%100000;

clock_t Start=clock(); 
mergesort(A,0,(5000*i)-1,4000*i);
clock_t Finish=clock();


cout<<endl;
  cout<<"随机输入"<<5000*i<<"个数据的运行时间"<<endl;
cout<<"Running time is:"<<static_cast<double>(Finish-Start)/CLOCKS_PER_SEC*1000<<"ms"<<endl;
cout<<"\n\n\n";
delete [] A;
}
}

这是一个测试运用mergesort(归并)排序算法测试数据的运行时间的程序

问题是,当输入的数据为2W5个时,就提示内存泄漏.
明明我每次new A数组时,都再每次循环的最后释放掉A的内存了。。怎么还是内存泄漏

===========================================================================
#include<iostream>
#include"time.h"
using namespace std;

int split(int A[],int low,int high,int w)
{
int i=low;
int x=A[low];
int temp;
for(int j=low+1;j<=high;j++)
{
if(A[j]<=x)
{
i++;
if(i!=j)
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}
temp=A[low];
A[low]=A[i];
A[i]=temp;
w=i;
return w;
}

void quicksort(int A[],int low,int high)
{
int w;
if(A[low]<A[(low+high)/2])
if(A[(low+high)/2]<A[high])
w=(low+high)/2;
else
if(A[low]<A[high])
w=high;
else
w=low;
else
if(A[high]>A[low])
w=low;
else
if(A[high]>A[(low+high)/2])
w=high;
else
w=(low+high)/2;
if(low<high)
{
w=split(A,low,high,w);
quicksort(A,low,w-1);
quicksort(A,w+1,high);
}
}


void main()
{
srand(time(NULL));
int i,j;
double Time; 
for(i=1;i<=5;i++)
{
int *A=new int[5000*i];
for(j=0;j<(5000*i);j++)
A[j]=rand()%100000;

clock_t Start=clock(); 
quicksort(A,0,(5000*i)-1);
clock_t Finish=clock();


cout<<endl;
cout<<"随机输入"<<5000*i<<"个数据的运行时间"<<endl;
cout<<"Running time is:"<<static_cast<double>(Finish-Start)/CLOCKS_PER_SEC*1000<<"ms"<<endl;
  delete [] A;
}
}

这是第二个程序,是测试快速排序在输入数据为5K,1W,1W5,2W,2W5的运行时间,但很奇怪的是,为什么出来的结果总是有4个运行时间是0ms?不是应该是随着输入数据量的增大,运行时间也会随着增加的么?感觉是测试时间的那个函数出了点问题,但是在第一个程序中,这个测试运行时间的函数好像又可以正常使用。。


感觉很奇怪。。。

[解决办法]
第一个程序
merge函数中申请的临时数组B,在函数结束的时候没释放。
每次去merge都要多申请一次B,怎么吃的消

热点排行