亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教一下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 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號