c++执行时出现读取位置时发生冲突访问,为什么!

/****************************************************************一个人(属性:姓名、年龄、性别)学生(属... /****************************************************************
一个人(属性:姓名、年龄、性别)
学生(属性:人、成绩)
老师(属性:人、工龄)
在职教师研究生(属性:人、学生、老师、津贴)
*****************************************************************/
#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
class Rational
{
private:
int a,b;
public:
Rational(){a=0;b=0;}
Rational(int a1,int b1):a(a1),b(b1){}
~Rational(){}//{cout<<"destructor"<<endl;}
Rational operator+(Rational &num)
{
Rational n;
n.b=b*num.b;
n.a=a*num.b+num.a*b;
return n;
}
Rational operator*(Rational &num)
{
Rational n;
n.b=b*num.b;
n.a=a*num.a;
return n;
}
bool operator==(Rational &num)
{
Rational n,m;
n.b=b*num.b;
n.a=a*num.b;
num.a=b*num.a;
if(n.a==num.a)return true;
else return false;
}
string value()
{
char s1[15],s2[15];
//string s1,s2;
itoa(a,s1,10);
itoa(b,s2,10);
strcat(s1,"/");
strcat(s1,s2);
return s1;// 把a/b以分数形式作为字符串返回
}
};
int main()
{
Rational num1(1,3),num2(3,1),num3(2,6),result;
result=num1+num2;
//cout<<num1.value();
//printf("%s",num1.value());
printf("%s+%s = %s\n",num1.value(),num2.value(),result.value());
printf("%s*%s = %s\n",num1.value(),num2.value(),result.value());
printf("%s is %s equal to %s.\n",num1.value(),(num1==num2)?"":"not",num2.value());
printf("%s is %s equal to %s.\n",num1.value(),(num1==num3)?"":"not",num3.value());
return 0;
}

OOT练习.exe 中的 0x745ed0ac 处最可能的异常: 0xC0000005: 读取位置 0x00332f31 时发生访问冲突
展开
 我来答
tattackor
推荐于2017-09-20 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:875万
展开全部
这种错误一般是指访问了不属于自己的内存空间。出现这种错误有几种原因:

1、给一个数组分配了比较小的内存空间,然后又给该数组赋了一个比较大的值,举例说明:charbuf[10];buf=C++读取位置0x******时发生访问冲突的可能原因C++读取位置0x******时发生访问冲突的可能原因;这样才访问buf的时候,就会出现错误解决方法:给数组分配更大一些的内存空间,如charbuf[1000];

2、句柄或指针在使用前被释放解决方法:检查代码配合调试,揪出野指针分析:内存冲突问题经常发生于用malloc等进行内存分配后指针的使用。C和C++中的指针,其优势很明显,灵活,方便,使用起来简单;劣势当然也很明显,就是容易导致系统崩溃,指针操作不当,或没有及时释放,或没有判断指针是否越界,或没有及时置空,这些都很容易导致系统崩溃,所以使用指针一定要考虑严谨。
bhtzu
2014-11-24 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4141万
展开全部

string是类,printf()只能打印基本类型,因此显示格式化失败。

你可以转换一下再显示(当然,这个并不是推荐的方法,应该使用标准类型):

	printf("%s+%s = %s\n",num1.value().c_str(),num2.value().c_str(),result.value().c_str());
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ooootherz
2015-07-24 · TA获得超过165个赞
知道小有建树答主
回答量:198
采纳率:0%
帮助的人:78.1万
展开全部
能附上图吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
珑月三
2015-07-14 · TA获得超过409个赞
知道小有建树答主
回答量:284
采纳率:0%
帮助的人:112万
展开全部
大概是一个指针赋给两个地址了
c++指针比较乱,有这个可能的说
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
N_0_1
高粉答主

2015-06-16 · 关注我不会让你失望
知道大有可为答主
回答量:8628
采纳率:47%
帮助的人:815万
展开全部
指针使用错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式