聚美上的手表是正品吗:高分悬赏:C++动态分配内存与释放的问题(请高手解答)

来源:百度文库 编辑:高考问答 时间:2024/05/02 02:13:05
请高手们一定认真看完,比较长
我写了一个矩阵的类,部分代码如下:
CMatrix::CMatrix(int row/*=3*/, int col/*=3*/)
{
m_ppData = NULL;
Resize(row, col);
}
//拷贝构造函数
CMatrix::CMatrix(const CMatrix& right)
{
Resize(right.GetRow(), right.GetCol());
for(int i = 0; i < right.GetRow(); i++)
{
for(int j = 0; j < right.GetCol(); j++)
m_ppData[i][j] = right[i][j];
}
}

CMatrix::~CMatrix()
{
Free();
}

void CMatrix::Free()
{
if(m_ppData != NULL){
for(int i = 0; i < m_iRow; i++)
{
if(m_ppData[i] != NULL)
delete[] m_ppData[i];
m_ppData[i] = NULL;
}
m_ppData = NULL;
}
}

int CMatrix::Resize(int row, int col)
{
assert(row > 0 && col > 0);

//释放空间
Free();

//申请空间
m_iRow = row;
m_iCol = col;
m_ppData = new double*[m_iRow];
assert(m_ppData != NULL);
for(int i = 0; i < m_iRow; i++)
{
m_ppData[i] = new double[m_iCol];
assert(m_ppData[i] != NULL);
}

//初始化
for(i = 0; i < m_iRow; i++)
{
for(int j = 0; j < m_iCol; j++)
m_ppData[i][j] = 0;
}
return 1;
}

下面是错误情况:
void main()
{
CMatrix n(3, 3);
n[1][1] = 2;
CMatrix temp = n;//
}
其中在debug时没有任何错误。
但在release版本却出现应用程序错误的对话框,基本意思是说“某某内存不能为read(written)”那个对话框。
我将Resize函数中的Free()调用删除后一切正常,难道是我的Free()函数编写有问题
请哪位高手指点

环境:windows 2000 server, VC++6.0
我已经找到了问题答案:
同一个对象不会同时调用构造函数和拷贝构造函数,所以在拷贝构造函数里也要对m_ppData初始化:m_ppData = NULL;

n知道答案说一下啊,我也想知道一下