Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Влад Колодка
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 29
#1

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? - C++

21.08.2016, 10:43. Просмотров 245. Ответов 14
Метки нет (Все метки)

Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить.

По непонятным для меня причинам этот код КОМПИЛИРУЕТСЯ. И программа даже не вылетает при задании размера массива -1. Почему?

C++
1
2
3
4
5
6
7
8
9
10
11
12
int main(){
    int size;
    cin >> size;
 
    int arr[size];
 
    arr[0] = 10;
 
    cout << arr[0] << " ";
 
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2016, 10:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? (C++):

Почему это компилируется, ведь под второй массив по идее не выделено в куче памяти - C++
К сожалению на момент создания темы исходника не было под рукой...В общем что значит вот такой способ инициации двухмерного массива: int...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб? - C++
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...

Почему в массив фиксированного размера N возможно записать элементов больше, чем N ? - C++
почему если я создаю массив char a, то могу в него записывать больше одного елемента?

Почему не компилируется? - C++
Добрый день! Почему не компилируется данная программа. Хотелось бы чтобы из одного класса можно было вызвать метод другого класса. ...

Почему не компилируется? - C++
Привет, перейду сразу к делу. Вот все говорят, что Visual Studio самая крутая студия, а она даже не может скомпилировать эту простую...

Почему не компилируется - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; const double Pi = 3.14159; double Area(double...

14
Пупкин Саша
0 / 0 / 0
Регистрация: 21.08.2016
Сообщений: 5
21.08.2016, 10:45 #2
Вы собираетесь использовать динамический массив. В этом случае вместо:
C
1
int arr[size];
используйте
C
1
int * arr;
0
Влад Колодка
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 29
21.08.2016, 10:48  [ТС] #3
Я знаю как объявлять динамические массивы. В данном случае понять почему данный код компилируется без ошибок при статическом массиве.
0
Пупкин Саша
0 / 0 / 0
Регистрация: 21.08.2016
Сообщений: 5
21.08.2016, 10:48 #4
Размер статического массива должен быть константой!!! например
C
1
2
const int size = 5;
int arr[size]
0
Влад Колодка
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 29
21.08.2016, 10:49  [ТС] #5
Знаю. Обычно без указания "const" вылетала ошибка во время компиляции. Но сейчас почему-то не вылетает, и приведеный мной код работает будто это динамический массив.
0
Пупкин Саша
0 / 0 / 0
Регистрация: 21.08.2016
Сообщений: 5
21.08.2016, 10:50 #6
А какой у вас компилятор?
0
Влад Колодка
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 29
21.08.2016, 10:52  [ТС] #7
MinGW. Пишу в Qt Creator
0
Пупкин Саша
0 / 0 / 0
Регистрация: 21.08.2016
Сообщений: 5
21.08.2016, 10:53 #8
Странно ... Может прога парсит?
0
Влад Колодка
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 29
21.08.2016, 10:55  [ТС] #9
Сначала я думал что при компиляции подставляется адекватное значение. Явно задал свое, и все равно успешная компиляция.
C++
1
2
3
4
int size = -1;
    int arr[size];
 
    arr[0] = 10;
Иронично. Обычно люди пытаются добиться успешной компиляции, а тут хочешь сломать, и безуспешно)
0
Пупкин Саша
0 / 0 / 0
Регистрация: 21.08.2016
Сообщений: 5
21.08.2016, 10:59 #10
Память выделяется на <size> элементов массива. А так простой динамический массив...
0
HelicopterK52
682 / 207 / 28
Регистрация: 27.07.2016
Сообщений: 474
Завершенные тесты: 1
21.08.2016, 11:01 #11
Цитата Сообщение от Влад Колодка Посмотреть сообщение
В данном случае понять почему данный код компилируется без ошибок при статическом массиве
C++
1
2
3
    int size;
    cin >> size; 
    int arr[size];
Это вообще не будет компилироваться в соответствии со стандартом (можете добавить ключик -pedantic-errors)
Это нестандартное расширение от GCC VLA
1
Влад Колодка
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 29
21.08.2016, 11:01  [ТС] #12
Так если у меня задан размер "-1", размер массива же в принципе не может быть отрицательным. Но компилятор не ругается
0
hoggy
6697 / 2879 / 494
Регистрация: 15.11.2014
Сообщений: 6,478
Завершенные тесты: 1
21.08.2016, 11:03 #13
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Влад Колодка Посмотреть сообщение
этот код КОМПИЛИРУЕТСЯ
вероятно вы выполняете сборку руками gcc ( или mingw, который на самом деле только пользует gcc).

gcc в качестве нестандартного расширения позволяет использовать variable length array
https://habrahabr.ru/post/195148/


по поводу циферки -1 см. документацию языка си.
1
HelicopterK52
682 / 207 / 28
Регистрация: 27.07.2016
Сообщений: 474
Завершенные тесты: 1
21.08.2016, 11:04 #14
Цитата Сообщение от Влад Колодка Посмотреть сообщение
Но компилятор не ругается
С чего он должен ругаться, если значение Вы задаете в рантайме?
0
Влад Колодка
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 29
21.08.2016, 11:53  [ТС] #15
В рантайме при "-1" тоже не вылетает ошибок.

Добавлено через 28 секунд
Спасибо
0
21.08.2016, 11:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2016, 11:53
Привет! Вот еще темы с ответами:

Не компилируется почему-то - C++
Вот код программы, она вроде как бы работает, но все равно выдаются ошибки, помогите пожалуйста их исправить, в c++ я новичок: ...

почему не компилируется ? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; using namespace std; class element { ...

почему не компилируется программа ? - C++
почему не компилируется ? ( #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; using namespace...

Почему не компилируется код - C++
Доброго времени суток, я только начал постигать азы великого и могучего, по этому не смейтесь если вам вопрос покажется слишком простым......


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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