如何解决C ++中的数组初始化?
|int main()
{
clrscr();
int x[3];
int n;
cout<<\"Enter the array size= \";
cin>>n;
cout<<\"Enter the elements for array= \";
for(int i=0;i<n;i++)
{
cin>>x[i] ;
}
for(i=0;i<n;i++)
{
cout<<\"x[\"<<i<<\"]=\"<<x[i]<<\"\\n\";
}
getch();
return 0;
}
当我在c#中尝试相同的逻辑时,我得到了正确的输出,就好像我输入数组的大小多于初始化时,它给出了异常。但是在c ++中,无论是在编译时还是在运行时都没有得到任何类型的错误。但是根据规则,如果我提供的数组大小大于初始化的大小,则应该在运行时在输出中给出一些错误。还有一点原因为什么将09确定为两个数字而不是不为90的数字,并在输出的差异索引中将其显示为0和9。
解决方法
如果有数组:
char array[3];
然后尝试写入不存在的元素:
array[15] = \'!\';
这是一个错误。但是,C ++ Standard不需要编译器来诊断此错误,大多数都不需要。这是因为每次访问数组都需要进行计算以确定您是否在数组范围内。
取而代之的是,程序员应通过编写自己的边界检查来确保他/她正确使用数组。然后,只有在程序员认为必要时才执行检查,并且不会浪费计算量。
所以:
std::cin >> n;
if (n > 3)
throw std::runtime_error(\"OMG not enough space in my array!\");
, 当您超载数组时,不需要C ++和C语言的C语言即可引发异常。数组只是内存块,当它们超负荷运行时,唯一会遇到错误的情况是,您超出了操作系统运行时允许您以内存中用户身份访问的范围。例如,如果您遍历了数组,并为函数的返回指针覆盖了值,然后当函数返回时,它将尝试在指令指针中放置一个伪造的返回地址,操作系统本身将抛出分段错误,因为您试图执行超出允许的内存地址的代码。分段错误和总线错误消息虽然是特定于操作系统的,但并非特定于C或C ++(即,您在组装时会遇到相同的错误)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。