关于数组越界

P1001 A+B Problem

int64 @ 2021-08-24 21:53:15

下面这段代码:

#include<iostream>
using namespace std;

int a[4];

int main() {
    cin >> a[0] >> a[1];
    a[10] = a[0] + a[1];
    a[2] = a[10];
    cout << a[2] << endl;
    return 0;
}

明显 a[10] 超过了 a 定义的长度 4,但是为何没有影响程序并且 AC 了此题?


by 王熙文 @ 2021-08-24 21:56:27

可能是把某个在程序里,但是可能是自动定义的变量的值给改了,就是说 a[10] 和某个变量的地址是一样的,然后之后 a[2] 又赋成了这个变量的值,也就是刚改过的

(纯属口胡)


by PPL_ @ 2021-08-24 21:56:48

@int64 玄学,而且你把 a[1] 改成 a[-1] 也可以过,不知道为什么,同求。


by int64 @ 2021-08-24 21:56:58

吸氧 A 了?


by Super_Supper @ 2021-08-24 21:58:16

@int64

这样也能过,还有什么好说的呢?顺便%%%

#include<iostream>
using namespace std;

int a[0];

int main() {
    cin >> a[0] >> a[1];
    a[10] = a[0] + a[1];
    a[2] = a[10];
    cout << a[2] << endl;
    return 0;
}

az


by 王熙文 @ 2021-08-24 21:58:37

考虑运行这样的一个程序:

#include <bits/stdc++.h>
using namespace std;
int a[10000],b;
int main(){
    a[10000]=100;
    cout<<(&a[10000])<<' '<<(&b)<<endl;
    cout<<a[10000]<<' '<<b<<endl;
    return 0;
}

by MeowScore @ 2021-08-24 21:58:55

@sb_yyds /jk/jk/jk/fad


by Super_Supper @ 2021-08-24 21:58:57

记录。。。


by Jr_Zlw @ 2021-08-24 21:58:59

我试过一种比较玄学的调用,感觉有时候它会像变量溢出一样循环调用


by int64 @ 2021-08-24 21:59:17

@sb_yyds


by 斜揽残箫 @ 2021-08-24 21:59:35

吸氧能 A 就离谱


上一页 | 下一页