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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mzarb
-211 / 7 / 1
Регистрация: 14.01.2013
Сообщений: 141
#1

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

30.10.2013, 22:58. Просмотров 287. Ответов 4
Метки нет (Все метки)

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
Найти сумму элементов одномерного массива размером k, расположенных после первого положительного элемента C++
Применить изменения к файлу, который был спроецирован в память, и там изменен C++
C++ Найти в массиве сведений о компьютерах такой, который был выпущен позднее других
Создать класс, который представляет собой двумерный массив размером n x m C++
Объяснить почему выводит на экран не тот элемент массива, который ожидается C++
C++ Выяснить почему после ввода первого элемента массива цикл не работает (std::cin в цикле for)
Почему разные адреса одного и того же элемента динамического массива? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
30.10.2013, 23:12     Почему изменение элемента массива, который был объявлен с размером [] - это UB? #2
В первом примере не должно быть UB.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 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
367 / 266 / 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?
Ответ Создать тему
Опции темы

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