简体   繁体   中英

Array initialization in 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;
}

When m trying the same logic in c# then I got the right output as if I enter the size of array more than I initialize it gives the exception. But in c++ m not getting any type of error neither on compilation time nor at run time. But according to rule it should be give some error at run time in output if i give array size more than I initialize. And one thing more why it determine the 09 as two numbrs not single as 90 it shows it 0 and 9 at differect index as in output.

输出

在此处输入图像描述

If you have an array:

char array[3];

And you try to write into an element that doesn't exist:

array[15] = '!';

Then this is an error. However, a compiler is not required by the C++ Standard to diagnose this error, and most do not. This is because it would require computation every time you accessed the array to determine whether you were within the array bounds.

Instead, it is up to the programmer to ensure that he/she uses the array correctly , by writing these bounds checks his- or herself. Then the checks are only performed when the programmer has deemed them necessary, and there are no wasted computations.

So:

std::cin >> n;

if (n > 3)
   throw std::runtime_error("OMG not enough space in my array!");

C++ and in-turn C are not required to throw an exception when you over-run an array. Arrays are simply memory blocks, and when you over-run them, the only time you will encounter an error is when you have exceeded the bounds of what the operating system run-time allows you to access as a user in memory. For instance, if you over-ran your array, and wrote over the values for the return pointer for your function, and then when the function returns, it tries to place in the instruction pointer register a bogus return address, the OS itself will throw a segmentation fault because you tried to execute code beyond a memory address you were allowed. Segmentation faults and bus error messages though are OS-specific, not specific to C or C++ (ie, you'd get the same errors with assembly).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM