代码:#include <iostream>#include <windows.h>using namespace std;void main(){void Read1(int*,long);void Read2(int*,long);void Read3(int*,long);void Read4(int*,long);void Read5(int*,long);while(1){cout<<"输入读取的字节数:";long n;cin>>n;int * data=new int[n];DWORD t1,t2,t3,t4,t5;t1=GetTickCount();Read1(data,n);t2=GetTickCount();Read2(data,n);t3=GetTickCount();Read3(data,n);t4=GetTickCount();Read5(data,n);t5=GetTickCount();cout<<"顺序:"<<int(t2-t1)<<endl;cout<<"乱序1:"<<int(t3-t2)<<endl;cout<<"乱序2:"<<int(t4-t3)<<endl;cout<<"逆序:"<<int(t5-t4)<<endl;cout<<endl;delete [] data;}}void Read1(int* data,long n){//顺序读取long i=0;while(i<n){data[i++]=1;}}剩下的几个Read()基本类似,运行的时候再delete[]处出现heap corruption的错误,为什么?
2 回答
湖上湖
TA贡献2003条经验 获得超2个赞
从目前的代码看,应该就是以下问题了
从你的方法void Read1(int * data, long n);分析讨论
由于这个方法的第一个参数是data并非为const,也就是执行完这个函数后,main中data与Read1中的地址相同,到此时还未问题
由于没有给出Read2、Read3、Read5,无法判断,LZ可以自己看看这些函数
因为main中int * data=new int[n];即只分配了n个int大小的内存
如果在Read2、Read3、Read5执行后,数组变大了,就会出现这种问题
阿晨1998
TA贡献2037条经验 获得超6个赞
A a = new A(); A *p = a; delete p; 多发点 你的写法int a; int* p = &a; delete p; // -> Heap corruption! A ,iYVRmq
添加回答
举报
0/150
提交
取消