0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 6
|
|||||||||||
1 | |||||||||||
Инициализация массива C++30.09.2014, 11:27. Показов 2585. Ответов 8
Метки нет Все метки)
(
Почему, если мы не инициализируем переменную, то при попытке работы с ней будет ошибка
Второй день только изучаю C++, отсюда и такие тупые вопросы.
0
|
30.09.2014, 11:27 | |
Ответы с готовыми решениями:
8
Инициализация массива Инициализация массива Инициализация массива
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
30.09.2014, 11:38 | 2 |
массив N переменных, это(если очень упростить) N блоков памяти подрят, каждый размером с переменную.
если int - 32бита. Когда создается массив/переменная, в памяти просто выделяется кусок под него, и что там лежало(в зависимости от ряда факторов разное), то и лежит(в некоторых компилляторах по умолчанию таки инициализируется 0). Так что при работе с неинициализированными данными полюбому возникнет, так называемое, undefined behaviour. Некоторые компилляторы генерируют предупреждение, некоторые ошибку....
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
30.09.2014, 11:47 | 3 |
В Visual Studio собираешь? По стандарту это не ошибка, просто значение будет не инициализировано, т.е. мусор (и будет предупреждение при должных ключах компилятора)
Массивы проверять слишком утомительно при компиляции. P.S. Хотя, лучше расскажи в какой среде собираешь и приведи конкретные сообщения ошибок.
Добавлено через 7 минут Отсутствие инициализации это не UB. См. 8.5/11
0
|
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
|
|
30.09.2014, 12:25 | 4 |
0
|
0 / 0 / 0
Регистрация: 27.09.2014
Сообщений: 6
|
|
30.09.2014, 12:44 [ТС] | 5 |
Собираю в Visual Studio 13. То, что там будет "мусор", это понятно. Меня больше волнует вопрос, на который я так и не увидел ответа, почему при попытке обратиться к ячейке не инициализированного массива этого же типа не возникает ошибки о том, что массив не инициализирован, как при работе с обычной переменной, а выдает вполне конкретное значение, причем одно и тож е каждый раз, даже в разных программах (char arr[] - "M", int arr[] - -858993460)?
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
30.09.2014, 13:00 | 6 |
Для начала попробуй собрать и запустить программу в режиме релиза. Увидишь, что ошибки, которая была раньше, не будет. А суть в том, что IDE при сборке проекта в режиме отладки помогает выловить несколько больше неоднозначных ситуаций, чем в режиме релиза. Но и даже в этом случае не стоит рассчитывать на то, что диагностика ошибок (в данном случае использование неинициализированного массива) будет всеобъемлющей. C++ не тот язык, который будет исправлять ошибки программиста.
0
|
Fallenworld
|
01.10.2014, 10:18
#7
|
0
|
:)
![]() 4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
01.10.2014, 10:26 | 8 |
Есть языки, в которых инициализация переменных является обязательной, например C#:
http://ideone.com/9Tw1vV
0
|
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
|
|
01.10.2014, 10:57 | 9 |
В отладочном режиме все неинициализироанные переменные заполняются значениями (bin): 1100 1100 .....
0
|
01.10.2014, 10:57 | |
01.10.2014, 10:57 | |
Помогаю со студенческими работами здесь
9
Инициализация массива Инициализация комплексного массива
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |