Форум программистов, компьютерный форум CyberForum.ru

Почему изменение элемента массива, который был объявлен с размером [] - это UB? - C++

Восстановить пароль Регистрация
 
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
30.10.2013, 22:58     Почему изменение элемента массива, который был объявлен с размером [] - это UB? #1
C++
1
2
char str[] = "zzarb";
str[0] = 'm'; // Undefined Behavior
C++
1
2
char str[6] = "zzarb";
str[0] = 'm'; // OK
Что-то я не пойму, почему тогда все нормально, если указать размер вручную, а не давать компилятору автоматически высчитать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2013, 22:58     Почему изменение элемента массива, который был объявлен с размером [] - это UB?
Посмотрите здесь:

C++ В одномерном массиве, который состоит из n вещественных элементов подсчитать номер минимального элемента массива
C++ Воспроизводится только тот код, который был до текущего
Пользователь вводит с клавиатуры N чисел. Определить номер максимального элемента, выдав сообщение вида "Максимальный номер элемента был введен 7-м" C++
C++ Нахождение последнего элемента одномерного числового массива, который больше 1
C++ Вывести на экран каждые три элемента массива размером 15
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
30.10.2013, 23:12     Почему изменение элемента массива, который был объявлен с размером [] - это UB? #2
В первом примере не должно быть UB.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.10.2013, 23:27     Почему изменение элемента массива, который был объявлен с размером [] - это UB? #3
Цитата Сообщение от mzarb Посмотреть сообщение
char str[] = "zzarb";
str[0] = 'm'; // Undefined Behavior
это не UB, вот UB
C++
1
2
char* s = "hello";
s[0] = 't';
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
30.10.2013, 23:40     Почему изменение элемента массива, который был объявлен с размером [] - это UB? #4
Цитата Сообщение от mzarb Посмотреть сообщение
C
1
2
char str[] = "zzarb";
str[0] = 'm'; // Undefined Behavior
Тогда, по вашему,
C++ (Qt)
1
2
int32_t iA[] {0,1,2,3,4,5};
ia[0] = 10;
тоже UB ?
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
31.10.2013, 00:17  [ТС]     Почему изменение элемента массива, который был объявлен с размером [] - это UB? #5
Тут последний(13) комментарий и там объясняется почему, там есть ссылки с доказательствами. Просто думал, что вы это своими словами объясните. Но я задал вопрос прежде, чем увидел те ссылки, так что уже не нужно.
Yandex
Объявления
31.10.2013, 00:17     Почему изменение элемента массива, который был объявлен с размером [] - это UB?
Ответ Создать тему
Опции темы

Текущее время: 08:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru