| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1464 人关注过本帖
标题:一个类与对象的程序,编译连接都没错误,运行结果也没错,就是弹出应用程序 ...
只看楼主 加入收藏
wenkaiche
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-5-24
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
一个类与对象的程序,编译连接都没错误,运行结果也没错,就是弹出应用程序错误,调试的话,360阻止??不明白。那里出现错误了??
#include<cstring>
#include<iostream>
using namespace std;
class score
{int no;
char name[8];
int math;
int phi;
int data;
int ave;
public:
void write(int a,int b,int c,int d,char*p)
{no=a;math=b;phi=c;data=d;strcpy(name,p);name[sizeof(name)-1]='\0';}
void average()
{ave=(math+phi+data)/3;}
void display(score m)
{cout<<"学号"<<m.no<<"姓名"<<m.name<<"数学"<<m.math<<"物理"<<m.phi<<"数据结构"<<m.data<<"平均分"<<m.ave<<endl;}
};
int main()
{score s[3];
s[1].write(1001,80,70,60,"zhou");
s[1].average();
s[2].write(1002,90,80,85,"chen");
s[2].average();
s[3].write(1003,70,75,89,"wang");
s[3].average();
s[1].display(s[1]);
s[2].display(s[2]);
s[3].display(s[3]);
}
编译正确,连接正确,运行结果正确,然后出现:
2.exe-应用程序错误
"0x676e6177"指令引用的“0x676e6177”内存。该内存不能为“read”。若调试,360木马防火墙提示风险,怎么回事??
搜索更多相关主题的帖子: 应用程序 姓名 
2011-05-25 18:30
loveminttea
Rank: 3Rank: 3
来 自:河南科技学院
等 级:论坛游侠
帖 子:95
专家分:146
注 册:2010-10-14
收藏
得分:0 
跟360没关吧,我都一直开着360呢
2011-05-25 18:42
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
收藏
得分:0 
s[3]数组引用可以这样的吗?有s[3]的吗?
2011-05-25 18:51
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:3 
程序代码:
#include<cstring>
#include<iostream>
using namespace std;
class score
{private: //最好定义为私有成员,你什么都没定义
int no;
char name[8];
int math;
int phi;
int data;
int ave;
public:
void write(int a,int b,int c,int d,char*p)
{no=a;math=b;phi=c;data=d;strcpy(name,p);name[sizeof(name)-1]='\0';}
void average()
{ave=(math+phi+data)/3;}
void display(score m)
{cout<<"学号"<<m.no<<"姓名"<<m.name<<"数学"<<m.math<<"物理"<<m.phi<<"数据结构"<<m.data<<"平均分"<<m.ave<<endl;}
};
void main() //主函数还是声明为void类型吧,你后面什么都没返回
{score s[3];
s[0].write(1001,80,70,60,"zhou");  //root cause:你前面定义"score s[3];",后面接着却是s[1]、s[2]、s[3],下标越界了!!
s[0].average();
s[1].write(1002,90,80,85,"chen");
s[1].average();
s[2].write(1003,70,75,89,"wang");
s[2].average();
s[0].display(s[0]);
s[1].display(s[1]);
s[2].display(s[2]);
system("pause");
}


[ 本帖最后由 Pirelo 于 2011-5-25 19:04 编辑 ]
2011-05-25 18:57
lyj23
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:168
专家分:140
注 册:2010-10-31
收藏
得分:3 
void display(score m)

这个习惯不太好,拷贝对象会浪费时间!用引用或指针好些。
还有数组下标超出范围。
还有楼上的,
什么都没定义在class里就是private,在struct中就是public。
主函数声明为void在一些编译器里通不过编译。最好用int,以免不必要的麻烦,最后return 0
2011-05-25 19:28
Pirelo
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:118
专家分:550
注 册:2011-1-28
收藏
得分:1 
回复 5楼 lyj23
这位大侠曲解了我的意思吧?我并没说数据成员一定是private或者public,在这里我们先不说class和C++中的structure的区别,
这仅仅只是一个提议,
我只是觉得既然大家选择了面向对象,那应该有个好的封装习惯:即把数据隐蔽起来,而成员函数作为对外的接口;我想这也是我们为什么要学习类的一个初衷。
诚然,你可以不用声明他们为private,甚至用structure,或是直接C代码去实现,我尊重这些实现的方法,但也保留自己的看法。
2011-05-25 20:54
linw1225
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:110
专家分:145
注 册:2011-4-7
收藏
得分:0 
标准的主函数貌似应该  int main
最后 写上  return 0;

Einmal ist keinmal
2011-05-25 22:09
wenkaiche
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-5-24
收藏
得分:0 
回复 4楼 Pirelo
我晕,下标越界我明白了。。(没想到越了界还能出正确结果?!)那个private.我定义了,在类的头部定义可以省略private,视为私有成员。
2011-05-26 22:58
wenkaiche
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-5-24
收藏
得分:0 
回复 5楼 lyj23
的确应该用int main(),但是最后没必要加return 0吧,我课本上的int main都没return 0;我也不明白到底加与不加有什么区别。
反正不加return 0的话,点compile出现warning(1)。然后点build,warning就消失了。还请教你。
2011-05-26 23:11
wenkaiche
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-5-24
收藏
得分:0 
回复 5楼 lyj23
对了,还有,下标越界不是语法错误吗?为啥compile没有出现错误??
2011-05-26 23:13
快速回复:一个类与对象的程序,编译连接都没错误,运行结果也没错,就是弹出应用 ...
数据加载中...
 
   



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

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