@Monstrikk

Статический и динамический массив в С?

Я учусь по книге "Язык программирования Си для начинающих. Грег Перри. Ден Миллер" и остановился на указателях и динамической памяти. У меня возник вопрос.

Зачем писать так:

int length;
scanf("%d", &length);
int *a = (int*) malloc(length * sizeof(int));


Когда можно писать вот так:
int length;
scanf("%d", &length);
int a[length];


В чем разница и когда нужно использовать статический и динамический массив?
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 3
CityCat4
@CityCat4
Кошки не похожи на людей, кошки - это кошки!
Так сделать просто нельзя :)

Обьявить массив переменного размера - невозможно. Все обьявления должны быть вычислены заранее, потому что помещаются в "кучу". И они все будут присутствовать в слинкованном бинарнике. И можно спланировать эксплойт выходом за границу.
Статические массивы - зло.

Кроме того, вместо malloc привыкайте сразу использовать calloc - это спасет от SIGSEGV, возникающих у нубов "на ровном месте" просто из-за того, что забыли проинициализировать память, полученную от системы.
Ответ написан
Zoominger
@Zoominger
Сись админ
В чем разница и когда нужно использовать статический и динамический массив?

Ну, например, когда размер массива неизвестен заранее.
Тогда используем динамический.
Ответ написан
@zedxxx
Разница во времени жизни и в месте размещения в памяти такого массива.

Динамический массив размещается в куче и живёт до тех пор, пока вы его руками не удалите (вызовом free(a)).

Статический* массив живёт на стеке и удаляется при выходе переменной из области видимости. Плюс ко всему, поскольку стек обычно имеет ограниченный размер, создание очень большого статического массива приведёт к ошибке переполнения стека (stack overflow).

P. S. Только такой массив называется не статический, а Variable Length Array (массив переменной длины).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
от 1 000 до 1 800 usd.
PLANAR Челябинск
от 70 000 до 110 000 руб.
iGooods.ru Санкт-Петербург
от 170 000 до 250 000 руб.