代碼:#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
提交
取消