Пустая инициализация массива с различным выходом

77
5

Я работал над проблемой и пытался инициализировать массив до 0. Это, arr [значение] = {0}; Когда я объявляю массив, он, похоже, дает отличный результат, чем он должен давать. Вот код:

Код:

Дело 1:

int count[2] = {0}; 
cout<<count[0];
cout<<count[1];
cout<<count[2];

Дает мне выход: 001

Хотя, случай 2:

int count[3] = {0}; 
cout<<count[0];
cout<<count[1];
cout<<count[2];
cout<<count[3];

Дает мне выход: 0000

Case 1 Case 2

Почему это происходит? Я что-то упускаю? ТИА.

спросил(а) 2016-07-17T15:20:00+03:00 3 года, 7 месяцев назад
1
Решение
60

Вы выходите за пределы! Вы выделили только память для двух целых чисел, и вы получаете доступ к третьему int.

Complier не выполняет проверку привязки. Это задача программиста.

Индекс массива начинается с 0.

int count[2] = {0}; 

Таким образом, вы должны получить доступ только к count[0] и count[1]. Это ваши два действительных объекта.

По этой причине вы должны использовать vectors и функцию-член, at которой выполняется связанная проверка.

ответил(а) 2016-07-17T15:22:00+03:00 3 года, 7 месяцев назад
69

Ваш индекс выходит за пределы допустимого диапазона. В int count[2] 2 говорит, что есть 2 участника, но вы пытаетесь отобразить 3 участника. Результат этого не определен.

ответил(а) 2016-07-17T15:22:00+03:00 3 года, 7 месяцев назад
50

int count[3] = {0};

тогда

cout<<count[3];//<-- out-of-bound array access yields undefined behaviour

ответил(а) 2016-07-17T15:22:00+03:00 3 года, 7 месяцев назад
35

C++ не является Visual Basic.

Когда вы объявляете массив, вы должны сказать, сколько элементов он будет удерживать.

Когда вы хотите три элемента, вы заявляете следующее:

int array[3];

И используйте три элемента:

array[0]
array[1]
array[2]

Вы меняете свой код на один, а затем пытаетесь использовать элемент массива, который не существует.

ответил(а) 2016-07-17T15:25:00+03:00 3 года, 7 месяцев назад
36

Это происходит потому, что int count[2] определяет массив с двумя записями, поэтому действительные индексы равны только 0 и 1 (а не 2).

ответил(а) 2016-07-17T15:22:00+03:00 3 года, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема