forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Интересность массивов (http://forum.boolean.name/showthread.php?t=14967)

Hagrael 23.06.2011 12:21

Интересность массивов
 
Вот код:
Код:

int main() {
    bool arr[0];
    cout << arr[0]; // вместо нулевого индекса может идти любой другой
    return 0;
}

Он выдает различные числа. Я понимаю, что если массив локален, и поэтому его ячейкам присваиваются какие-то случайные числа (кстати, почему это происходит?). Вопрос вот в чем: Получается, можно создавать массивы без ячеек? И получается, что если ты зайдешь за границу массива, то ошибки не будет?

HolyDel 23.06.2011 12:39

Ответ: Интересность массивов
 
прикольно. я думал компилятор будет ругаться на нулевой размер. или хотя-бы предупреждение выдавать.

upd. хотя студия и выдает:
Цитата:

Сообщение от MS VS 2010: cl.exe
1>c:\users\holydel\documents\visual studio 2010\projects\test22\main.cpp(5): error C2466: cannot allocate an array of constant size 0
1>c:\users\holydel\documents\visual studio 2010\projects\test22\main.cpp(5): error C2133: 'array' : unknown size

Цитата:

кстати, почему это происходит?
потому, что память просто выделяется. какие там были значения - такие и будут у тебя в массиве.

твоя кстати запись более похожа на

Код:

bool *someptr;
cout<< *someptr;

врочем студия и на етот код ругается, тока уже ворнингом

Цитата:

Получается, можно создавать массивы без ячеек?
получается - зависит от компилятора.

Цитата:

И получается, что если ты зайдешь за границу массива, то ошибки не будет?
обязательно будет. причем в самое неудобное время - например - во время презентации заказчику

Hagrael 23.06.2011 12:46

Ответ: Интересность массивов
 
Большое спасибо!

Mr_F_ 23.06.2011 14:29

Ответ: Интересность массивов
 
в релизе может проскочить, в дебаге 100% крашнется

L-ee-X 23.06.2011 15:18

Ответ: Интересность массивов
 
Лично у меня компилятор ошибку выдает при таком обращение :)

Hagrael 23.06.2011 19:28

Ответ: Интересность массивов
 
В книге написано, что C++ специально не проводит проверку на то, есть ли посылаемый индекс в массиве, чтобы у программы была большая производительность (одной проверкой меньше). С этой же целью отсчет индексов у них начинается с нуля (т. к. тогда место ячейки массива находится по формуле y=arr+x*type, а не y=arr+(x-1)*type).

12121 23.06.2011 20:14

Ответ: Интересность массивов
 
Если выйдешь за границу массива - изменишь другие переменные. А какие именно - зависит от того как компилятор их расположил в памяти. Это под отладчиком можно увидеть.


Часовой пояс GMT +4, время: 23:44.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot