[問題] 二維陣列記憶體配置及回收

看板C_and_CPP作者 (傻傻)時間15年前 (2009/10/29 02:12), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串1/6 (看更多)
請教各位一個問題二維陣列回收的問題,我的程式常常到解構delete[] REC_MIR[i];就會跳出錯誤訊息 記憶體配置跟釋放的方法應該沒有錯,就是不太懂問題出在哪,麻煩各位大大指教!! lib.h class atdf_header { public: atdf_header(); //default constructor ~atdf_header(); //destructor protected: char **REC_FAR; char **REC_MIR; char **REC_PIR; }; class atdf_file :public atdf_header { public: atdf_file(); //default constructor ~atdf_file(); //destructor private: ofstream atdffile; } lib.cpp #include "lib.h" #define STRLENGTH 50 #define FAR_SIZE 4 #define MIR_SIZE 38 #define PIR_SIZE 2 atdf_header::atdf_header() { /****** FAR dynamic memory allocation ******/ REC_FAR=new char*[FAR_SIZE]; for(int i=0;i<FAR_SIZE;i++) REC_FAR[i] = new char[STRLENGTH]; for(int i=0;i<FAR_SIZE;i++) *(REC_FAR+i)=""; /****** MIR dynamic memory allocation ******/ REC_MIR=new char*[MIR_SIZE]; for(int i=0;i<MIR_SIZE;i++) REC_MIR[i] = new char[STRLENGTH]; for(int i=0;i<MIR_SIZE;i++) *(REC_MIR+i)=""; /****** PIR dynamic memory allocation ******/ REC_PIR=new char*[PIR_SIZE]; for(int i=0;i<PIR_SIZE;i++) REC_PIR[i] = new char[STRLENGTH]; for(int i=0;i<PIR_SIZE;i++) *(REC_PIR+i)=""; } //----------------------------------------- atdf_header::~atdf_header() { /********* FAR free memory*********/ for(int i=0;i<FAR_SIZE;i++) delete [] REC_FAR[i]; delete [] REC_FAR; /********* MIR free memory*********/ for(int i=0;i<MIR_SIZE;i++) delete[] REC_MIR[i]; //---------------------->出問題地方 delete[] REC_MIR; /********* PIR free memory*********/ for(int i=0;i<PIR_SIZE;i++) delete[] REC_PIR[i]; //---------------------->有時候Error也在這 delete[] REC_PIR; } main.cpp int main(int argc, char* argv[]) { atdf_file test; system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.210.112.66

10/29 10:47, , 1F
應該是 copy constructor 惹的禍
10/29 10:47, 1F

10/29 10:52, , 2F
我想你並沒有改寫 atdf_header 的 copy constructor
10/29 10:52, 2F
文章代碼(AID): #1AwFeCwQ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AwFeCwQ (C_and_CPP)