У меня есть этот код в C++, который дает странный вывод:Почему эта часть кода ведет себя странно?
#include<iostream>
using namespace std;
int main(){
int r[15]={0};
int n = 5;
r[15]=20;
cout<<n;
}
Выход, очевидно, должно быть 5, но это дает мне 20. Теперь я знаю, что г [15] выходит за пределы границ. Этот код должен был вызвать исключение для попытки доступа к r [15], не так ли? Однако он обычно компилируется с g ++ и дает неправильный вывод. Я не могу понять, что вызывает эту аномалию. Может ли кто-нибудь помочь?
Просто FYI, этот код является всего лишь образцом, мне пришлось вычислять эту ошибку из более крупного кода, который занимал у меня много времени, которое в противном случае могло бы быть сохранено, если бы возникло исключение.
Update: Я проверил следующий код:
#include<iostream>
using namespace std;
int main(){
int n = 5;
int r[15]={0};
r[15]=20;
cout<<n;
}
Output:
20
я проверил следующий код тоже:
#include<iostream>
using namespace std;
int main(){
int n = 5;
int a=5;
int r[15]={0};
r[15]=20;
cout<<n<<endl<<a;
}
Output:
5
5
Итак, если стек объяснение правильно, либо из значений должны» в этом случае тоже было изменено, верно? Это не так.
Особенно, если вы изучаете, рассмотрите возможность использования 'std :: vector' и 'at()' - намного проще в использовании, а 'at()' будет генерировать исключения, если задан неверный индекс. –