为了账号安全,请及时绑定邮箱和手机立即绑定

请教一下C++ delete[]出现heap corruption的错误情况?

请教一下C++ delete[]出现heap corruption的错误情况?

斯蒂芬大帝 2021-12-15 15:11:19
代码:#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执行后,数组变大了,就会出现这种问题

查看完整回答
反对 回复 2021-12-19
?
阿晨1998

TA贡献2037条经验 获得超6个赞

A a = new A(); A *p = a; delete p; 多发点 你的写法int a; int* p = &a; delete p; // -> Heap corruption! A ,iYVRmq

查看完整回答
反对 回复 2021-12-19
  • 2 回答
  • 0 关注
  • 204 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信