猿问

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

代码:
#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的错误,为什么?

斯蒂芬大帝
浏览 215回答 2
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

A a = new A(); A *p = a; delete p; 多发点 你的写法int a; int* p = &a; delete p; // -> Heap corruption! A ,iYVRmq
随时随地看视频慕课网APP
我要回答