2013-03-11 4 views
-8
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]); 
} 

Как выше код производить ниже выходные? Является ли это интерпретируемым или это неопределенное поведение - носовой демон? Я думаю, второй, потому что размер выходной матрицы не зависит от размера массива вкладок.

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 . . . 
+5

Это чтение неинициализированной памяти. – chris

+2

dup? http://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in-c-does-it-have-a-value –

+0

@Qbik не могли бы вы вернуть правильный код? его промахивание в поведении вашего вопроса. – dhein

ответ

6

Использование неинициализированной переменной ivokes UB. Вы не инициализировали x, так что да, вы вызываете неопределенное поведение.

+1

Довольно уверен, что это не неопределенное поведение; местоположение просто имеет «неопределенное значение». Это означает, что вы не можете полагаться на значение, и это плохая идея в любом случае (я бы подумал, что компилятор даже предупредит об этом), но ничто не загорится, и никакие демоны не вылетят из чьего-либо носа. – cHao

+0

@cHao http://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in-c-does-it-have-a-value например –

+0

Ну, это просветительская. :) Предположения, которые вы делаете, когда они работали с полноразмерными интегральными типами с двумя дополнениями всю свою жизнь ... lol ... +1 – cHao

Смежные вопросы