作者kyokb (傻傻)
看板C_and_CPP
标题[问题] 二维阵列记忆体配置及回收
时间Thu Oct 29 10:12:25 2009
请教各位一个问题二维阵列回收的问题,我的程式常常到解构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
1F:→ csihcs:应该是 copy constructor 惹的祸 10/29 10:47
2F:→ csihcs:我想你并没有改写 atdf_header 的 copy constructor 10/29 10:52