这是怎么回事儿?
编程实现一个可以把文本文件中的数字(文件中每行只有一个数字,行数未知)按照从大到小顺序输出,并求其平均数的类,调试连接都没问题,运行结果也正确,
但是程序结束时系统跳出一个对话框,内容是:"0x00404595"指令引用的"0x00000000"内存。该内存不能为"read"。关掉此对话框之后,又跳出一个内容是"0x00404595"指令引用的"0xdddddddc"内存。该内存不能为"read"。哪里出的问题?请解释一下,谢谢源代码如下:
//ave.h----------------------------
//---------------------------------
#ifndef HEADER_AVE
#define HEADER_AVE
#include<fstream>
using namespace std;
class Ave //定义这个类
{
protected:
double* d; //数组,用于储存文件中的数据
int s; //整形变量,数组的长度
public:
Ave(ifstream a); //构造函数
void input(ifstream a); //输入数据
void displaybyorder(); //排序并输出
double getave(); //求平均值
~Ave(); //析构
};
#endif
//ave.cpp----------------------- //类中的成员函数的定义
//------------------------------
#include "ave.h"
#include <iostream>
#include <fstream>
using namespace std;
Ave::Ave(ifstream a)
{
s=0;
double t;
for(;a>>t;s++); //用s记录文件中数据的个数
d=new double[s]; //新建一个长度为s的数组
}
void Ave::input(ifstream a)
{
for(int i=0;a>>d[i];i++);
}
void Ave::displaybyorder()
{
int i,j;
for(i=0;i<s;i++) //冒泡法排序
{
double max=d[i],t;
for(j=i+1;j<s;j++)
{
if(d[j]>max)
{
t=d[j];
d[j]=max;
max=t;
}
}
d[i]=max;
}
for(i=0;i<s;i++) //输出
cout<<d[i]<<' ';
cout<<endl;
}
double Ave::getave()
{
double sum=0;
for(int i=0;i<s;i++)
sum+=d[i];
return sum/s; //返回平均值
}
Ave::~Ave()
{
delete[] d; //释放内存
}
//main.cpp------------------------------
----------------------------------------
#include "ave.h"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
void main()
{
ifstream fin("aplusb.txt");
ifstream b("aplusb.txt");
Ave a(fin);
a.input(b);
a.displaybyorder();
double d=a.getave();
cout<<d<<endl;
}
[此贴子已经被作者于2007-4-8 11:20:13编辑过]