| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 483 人关注过本帖
标题:这是怎么回事儿?
只看楼主 加入收藏
ddsxd
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-22
收藏
 问题点数:0 回复次数:1 
这是怎么回事儿?
编程实现一个可以把文本文件中的数字(文件中每行只有一个数字,行数未知)按照从大到小顺序输出,并求其平均数的类,调试连接都没问题,运行结果也正确, 但是程序结束时系统跳出一个对话框,内容是:"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编辑过]

搜索更多相关主题的帖子: 内存 编程 文本文件 源代码 对话框 
2007-04-08 11:17
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

//ave.h----------------------------
//---------------------------------
#ifndef HEADER_AVE
#define HEADER_AVE
#include<fstream>
using namespace std;
class Ave //定义这个类
{
protected:
double* d; //数组,用于储存文件中的数据
int s; //整形变量,数组的长度
ifstream ins;
public:
Ave(const char *filename); //构造函数
void input(ifstream a); //输入数据
void displaybyorder(); //排序并输出
double getave(); //求平均值
~Ave(); //析构
};
#endif


//ave.cpp----------------------- //类中的成员函数的定义
//------------------------------
#include \"ave.h\"
#include <iostream>
#include <fstream>
using namespace std;
Ave::Ave(const char* filename)
{
ins.open(filename); //最好判断下文件是否存在,而且数据要读两遍似乎慢了点
s=0;
double t;
for(;a>>t;s++); //用s记录文件中数据的个数
d=new double[s]; //新建一个长度为s的数组
ins.close();
}

void Ave::input()
{
ins.open(filename); //最好判断下文件是否存在
for(int i=0;a>>d[i];i++);
ins.close();
}
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()
{
Ave a(\"aplusb.txt\");
a.input();
a.displaybyorder();
double d=a.getave();
cout<<d<<endl;
}


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-04-11 09:44
快速回复:这是怎么回事儿?
数据加载中...
 
   



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

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