使用二元运算符重载的乘法表会产生错误

时间:2014-08-04 08:06:25

标签: c++ turbo-c++

当我执行下面的代码时,它在turbo c ++ 4.5中没有显示错误。但是,当我运行它时,它给我一个错误

"一般保护异常0x00EA处理器故障"。

我的代码包含任何错误。我不知道在哪里问。任何建议都会有所帮助。

这是代码

#include<iostream.h>
#include<conio.h>
const size=10;

class tab 
{
int m[size];
public:
tab();
void disp();

friend tab operator *(int a,tab t3);
};

tab::tab()
{
for(int i=1;i<=size;i++)
{
m[i]=1;
}
}

void tab::disp()
{
for(int i=1;i<=size;i++)
{
cout<<m[i];
}
}

tab operator *(int a,tab t3)
{
tab t;
for(int i=1;i<=size;i++)
{
t.m[i]=a*t3.m[i]; 
}
return t;

}

void main()
{
tab t2,t1;
clrscr();
t2=2*t1;
t2.disp();
getch(); 
}

2 个答案:

答案 0 :(得分:1)

在C ++中,索引从0开始,而不是从1开始。

所以你的循环应该是

for (int i = 0; i < size; ++i)

而不是

for (int i = 1; i <= size; ++i)

答案 1 :(得分:1)

当您使用c / c ++跳出界限时,您肯定会在最新的操作系统中出现运行时错误,并且某些编译器也会事先为您提供相同的错误,以免您遇到任何其他崩溃。当你通过写

超过限制时
i<=size;

在for循环中,你最终会到达索引i = 10,而你的数组大小为0-9的索引为10.所以你得到一个运行时错误。你可以把它写成

i<size;

并且你的起始限制是i = 1是正确的,但它将从第二个值开始循环,因为索引从c / c ++中的0开始。