这是未定义的行为吗?

时间:2013-03-11 20:48:58

标签: c++

using namespace std;
struct s{
    int tab[9]; 
};

int main(){
    s x;

EDITION 初始化后我得到的输出相同

(x.tab)[0]=1;
(x.tab)[1]=1;
(x.tab)[2]=1;
(x.tab)[3]=1;
(x.tab)[4]=1;
(x.tab)[5]=1;
(x.tab)[6]=1;
(x.tab)[7]=1;
(x.tab)[8]=1;

    cout<<(x.tab[0]);
}

上面的代码如何产生下面的输出?它是可解释的还是未定义的行为 - 鼻恶魔?我认为第二个,因为输出矩阵的大小独立于tab数组的大小。

2293236 2293240 2293244 2293248 2293252 2293256 2293260 2293264 2293268
2293272 2293276 2293280 2293284 2293288 2293292 2293296 2293300 2293304
2293308 2293312 2293316 2293320 2293324 2293328 2293332 2293336 2293340
2293344 2293348 2293352 2293356 2293360 2293364 2293368 2293372 2293376
2293380 2293384 2293388 2293392 2293396 2293400 2293404 2293408 2293412
2293416 2293420 2293424 2293428 2293432 2293436 2293440 2293444 2293448
2293452 2293456 2293460 2293464 2293468 2293472 2293476 2293480 2293484
2293488 2293492 2293496 2293500 2293504 2293508 2293512 2293516 2293520
2293524 2293528 2293532 2293536 2293540 2293544 2293548 2293552 2293556

--------------------------------
Process exited with return value 0
Press any key to continue . . .

1 个答案:

答案 0 :(得分:6)

使用未初始化的变量iv UB。你没有初始化x所以是的,你正在调用未定义的行为。