| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 503 人关注过本帖
标题:[求助]析构函数莫名其妙总出错
只看楼主 加入收藏
AzureAegis
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-7-18
收藏
 问题点数:0 回复次数:2 
[求助]析构函数莫名其妙总出错

程序清单如下:

----------------------Matrix.h----------------------------------

#include <iostream>
#include <fstream>
#include <math.h>
#include <stdexcept>
#include <memory.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;

#ifndef _MATRIX_H_
#define _MATRIX_H_

///////////////////////////////////////////

// Declaration of Class Matrix //

///////////////////////////////////////////

class Matrix
{
protected:
double* m_data;
unsigned int m_row;
unsigned int m_col;
unsigned long int m_length;

public:
Matrix();
Matrix(unsigned int row, unsigned int col, double* pdata);
Matrix(Matrix &mat);
~Matrix();

inline unsigned int GetRow(void) { return m_row; };
inline unsigned int GetCol(void) { return m_col; };
inline unsigned long int GetLength(void) { return m_length; };
inline double GetData(unsigned long int pos)
{
return m_data[pos-1];
};

bool IsEmpty(void);
bool Reset(Matrix &mtr);
};

#endif

----------------------Matrix.cpp--------------------------------

#include "Matrix.h"

///////////////////////////////////////////

// Constructor & Destructor //

///////////////////////////////////////////

Matrix::Matrix()
{
m_row = 0;
m_col = 0;
m_length = 0;
m_data = NULL;
}

Matrix::Matrix(unsigned int row, unsigned int col, double* pdata)
{
m_row = row;
m_col = col;
m_length = (unsigned long int)(row * col);

m_data = new double[m_length];
try
{
if (m_data == NULL)
{
throw out_of_range("In constructor of Matrix(unsigned, unsigned, Dot*). Out of memory.");
}
if (pdata == NULL)
{
throw runtime_error("In constructor of Matrix(unsigned, unsigned, Dot*). Pointer is NULL.");
}
unsigned long int i;
for (i=0; i<m_length; i++)
{
m_data[i] = pdata[i];
}
}
catch (out_of_range &err)
{
std::cerr << err.what() << endl;
m_row = 0;
m_col = 0;
m_length = 0;
}
catch (runtime_error &err)
{
std::cerr << err.what() << endl;
m_row = 0;
m_col = 0;
m_length = 0;
}
}

Matrix::~Matrix(void)
{
if (m_data != NULL)
{
delete [] m_data;
}
}

///////////////////////////////////////////

// Member Function //

///////////////////////////////////////////

bool Matrix::IsEmpty(void)
{
if (m_length == 0)
{
return true;
}
else
{
return false;
}
}


bool Matrix::Reset(Matrix &mat)
{
if (!IsEmpty())
{
delete [] m_data;
m_data = NULL;
m_row = 0;
m_col = 0;
m_length = 0;
}

if (!mat.IsEmpty())
{
m_data = new double[m_length];
if (m_data == NULL)
{
return false;
}
else
{
m_row = mat.GetRow();
m_col = mat.GetCol();
m_length = mat.GetLength();
unsigned int long i;
for (i=0; i<m_length; i++)
{
m_data[i] = mat.GetData(i+1);
}
}
}

return true;
}

----------------------Main.cpp----------------------------------

#include "Matrix.h"

double testdata[] = { 1, 2,
1, 3 };
unsigned int row = 2, col = 2;

void main(void)
{
Matrix mtr;
mtr.Reset(Matrix(row, col, testdata));
}


发生问题描述:每次从Reset退出后,发生Matrix(row, col, testdata)构造的局部变量的解析时,在解析函数delete掉申请资源时,就会出错。实在不知道是怎么个问题,请高手指教,谢谢。

错误显示为:
Debug Assertion Failed!

搜索更多相关主题的帖子: include 函数 Matrix MATRIX 
2007-07-18 09:12
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 
Reset中  m_data = new double[m_length]; 这个应该是mat.m_length吧

天行健,君子以自强不息!!QQ:68660681
2007-07-18 09:55
AzureAegis
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-7-18
收藏
得分:0 

哎呀……不好意思。居然出了这种问题……
感谢2楼maoguoqing指点!


2007-07-18 10:00
快速回复:[求助]析构函数莫名其妙总出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016113 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved