У меня есть этот код на C ++, который дает странный вывод:
#include<iostream>
using namespace std;
int main(){
int r[15]={0};
int n = 5;
r[15]=20;
cout<<n;
}
Вывод, очевидно, должен быть 5, но он дает мне 20. Теперь я знаю, что r [15] выходит за пределы.Этот код должен был вызвать исключение при попытке доступа к r [15], не так ли?Тем не менее, он обычно компилируется с g ++ и выдает неправильный вывод.Я не могу понять, что является причиной этой аномалии.Кто-нибудь может помочь?
Просто к вашему сведению, этот код является просто примером, я должен был выяснить эту ошибку из более крупного кода, который занял у меня много времени, который, в противном случае, мог бы быть сохранен, если исключениебыл брошен.
Обновление: Я проверил следующий код:
#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
Итакобъяснение стека верное, в этом случае тоже должно быть изменено любое из значений, верно?Это не так.