Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124

Использование переменной для создания статического массива

17.03.2015, 19:45. Показов 2173. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Помогите разобраться, я запутался, пусть есть такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
using namespace std;
 
int main(){
    int size;
    cin >> size;
    int arr[size];
    cout << sizeof arr;
    return 0;
}
arr создается как статический массив, но размер его на момент компиляции неизвестен. Как такое прокатывает? Или компилятор втихую подменяет его динамическим? gcc
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2015, 19:45
Ответы с готовыми решениями:

Использование переменной типа Chart для создания диаграммы и вставки ее в конец документа Word
напишите код , который использует переменную типа Chart для создания диаграммы и вставки ее в конец документа Word.

Использование SET без создания private переменной
Обычно делается так: class TimePeriod { private double _seconds; public double Seconds { ...

Заменить использование статического массива в программе на динамический (что нужно поменять?)
#include &lt;iostream&gt; // cin , cout #include &lt;cstdlib&gt; //для system(&quot;pause&quot;) #include &lt;windows.h&gt; // для SetConsoleOutputCP(1251) ...

14
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
17.03.2015, 19:49
C++
1
error C2057: expected constant expression
1
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
17.03.2015, 19:51
В последних версиях С++ такое предусмотрено.
1
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
17.03.2015, 19:52
Цитата Сообщение от goditsa8 Посмотреть сообщение
arr создается как статический массив, но размер его на момент компиляции неизвестен. Как такое прокатывает?
прокатывает на Си у GCC и говорят в 11 стандарте
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
17.03.2015, 19:52
Лучший ответ Сообщение было отмечено goditsa8 как решение

Решение

Цитата Сообщение от goditsa8 Посмотреть сообщение
Как такое прокатывает?
Это Variable Length Array из C11 и C++14.
GCC любит включать VLA по умолчанию. О чём успешно сообщает при включенном флаге -pedantic
main.cpp:7:11: warning: ISO C++ forbids variable length array 'arr' [-Wvla]
1
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
17.03.2015, 19:53  [ТС]
rikimaru2013, у меня прекрасно работает. Чем компилили?
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
17.03.2015, 19:56
Цитата Сообщение от goditsa8 Посмотреть сообщение
у меня прекрасно работает.
это не аргумент
стандартизировано сие в 11 стандарте, в стандарте на Си
а GCC это поддерживал раньше вопреки стандарту
все остальные компиляторы, которые не поддерживают 11 стандарт, заверещат
1
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
17.03.2015, 20:00  [ТС]
Всем спасибо!
0
 Аватар для iRomul
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
17.03.2015, 23:03
Где создаётся VLA - на стеке, или компилятор автоматически размещает его в куче?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
17.03.2015, 23:18
Цитата Сообщение от iRomul Посмотреть сообщение
Где создаётся VLA - на стеке, или компилятор автоматически размещает его в куче?
В моём GCC 4.9.2 он создаётся в стеке. Полагаю что так должно быть везде.
1
15 / 15 / 3
Регистрация: 04.02.2013
Сообщений: 124
17.03.2015, 23:20  [ТС]
iRomul, http://en.wikipedia.org/wiki/V... ray#Memory
One problem that may be hidden by a language's support for VLAs is that of the underlying memory allocation: in environments where there is a clear distinction between a heap and a stack, it may not be clear which, if any, of those will store the VLA.[5]

For example, the GNU C Compiler allocates memory for VLAs on the stack.[6] VLAs, like all objects in C, are limited to SIZE_MAX bytes.[7]
2
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
18.03.2015, 06:27
Цитата Сообщение от castaway Посмотреть сообщение
В моём GCC 4.9.2 он создаётся в стеке.
вод здесь и непонятки
как рассчитывается размер стека?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
18.03.2015, 08:38
Цитата Сообщение от ValeryS Посмотреть сообщение
как рассчитывается размер стека?
А чего его рассчитывать, он известен.
C++
1
2
3
4
5
6
7
8
9
#include <cstdio>
 
int main( int narg, char ** )
{
    int size = narg * 100;
    volatile int arr[size];
    arr[0] = 0x1234;
    arr[size-1] = 0x5678;
}
Осталось только выполнить проверку на наличие стекового пространства.
Миниатюры
Использование переменной для создания статического массива  
0
Модератор
Эксперт по электронике
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,857
18.03.2015, 08:46
Цитата Сообщение от castaway Посмотреть сообщение
А чего его рассчитывать, он известен.
что известно?
какую часть стека я должен отдать массиву?
если не хватит рухнем на этапе исполнения?
что за подпрограмма __main?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
18.03.2015, 09:44
ValeryS, Вы не троллите?

Цитата Сообщение от ValeryS Посмотреть сообщение
что известно?
Цитата Сообщение от ValeryS Посмотреть сообщение
размер стека
Цитата Сообщение от ValeryS Посмотреть сообщение
какую часть стека я должен отдать массиву?
Вы - никакую. Компилятор отдаст часть, соответствующую размеру VLA.

Цитата Сообщение от ValeryS Посмотреть сообщение
если не хватит рухнем на этапе исполнения?
Да.

Цитата Сообщение от ValeryS Посмотреть сообщение
что за подпрограмма __main?
Она возвращает информацию о параметрах командной строки. Возможно выполняешь еще какие-то подготовительные функции. К VLA отношения не имеет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2015, 09:44
Помогаю со студенческими работами здесь

Предполагается ли в C# синтаксис для создания переменной того типа, который указан в переменной Type type
Как это мне представляется: Type type = new double().GetType(); type a = 3.2; type b = 4.1; Console.WriteLine(&quot;Result:...

Delete [] для статического массива
Здравствуйте! Подскажите, пожалуйста, что происходит при вызове delete к статическому массиву. Приводит ли это к ошибкам или утечкам...

Блок схема для двумерного статического массива
Помогите разобраться с задачей, нужно заполнить массив случайными числами ПО СТОЛБЦАМ. Я вроде бы это сделала, но индексы элементов он...

Нужен пример создания статического класса
Приведите, пожалуйста, пример создания статического класса.

Использование StringGrid для создания матрицы
здравствуйте. решил для создать матрицу для ввода матрицы использую StringGrid компонент, размерность задает пользователь и формируется...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru