用for循环输出数组却输出-858993460 的原因

输出-858993460的原因主要可能有两种原因,输出-858993460的原因主要可能有两种原因,
0.数组没有初始化
例如下面这个程序:

#include<iostream>
using namespace std;
class MyVector
{
public:
 void show()
 {
     //cout<<endl<<this->v[0]<<endl;
     for(int i=0;i<5;i++)
     {
         cout<<v[i]<<" ";
     }
     cout<<endl;
 }
 friend istream &operator>>(istream &is,MyVector MV)
 {
     for(int i=0;i<5;i++)
     {
         is>>MV.v[i];
         //cout<<MV.v[i];
     }
     return is;

 }
private:
 int v[5];
};
int main()
{
 MyVector v;
 while(cin>>v)
  v.show();
 return 0;
}

输入

1 2 3 4 5

其输出结果为:

-858993460 -858993460 -858993460 -858993460 -858993460

当重载了提取运算符,其参数却MyVector却不是引用(即使用取地址操作符),则将会导致这个友元函数里的所有对v[]数组的初始化都作废。

所以当运行时,成员函数show()则显示-858993460 ,因为输入输出并不是作用于同一内存空间,自然默认coder没有进行初始化。

1.数组溢出
例如下面这个程序:

#include<stdio.h>
void main()
{
    int i;
    int a[10];
    for(i=0;i<10;i++)
    a[i]=i;
    printf("%d",a[i]);
    printf("\n");
}

输出结果为:

-858993460

其输出-858993460 的原因就是因为,当循环结束时,此时数组的索引值为10,已经超出数组的长度,数组溢出。


发表评论

电子邮件地址不会被公开。 必填项已用*标注