Я пытаюсь увеличить размер массива динамически. Есть ли какая-либо стандартная функция C или C++, которая добавляет дополнительное пространство в конце массива или удаляет его? Я знаю, это сложно, так как не может быть уверен, что в куче хватает места в конце. Но разве это не должно быть операционная система?Динамически увеличивать/уменьшать размер массива
ответ
Функция вы ищете в C, который также присутствует в C++ STL как std::realloc
Хотя, как вы упомянули C++ realloc()
, вы могли бы также пойти для стандартного контейнера, как std::vector
, который инкапсулирует связанный управление памятью.
размер не убывает, ** ** ** –
ну, он уменьшается, если я введу меньший размер, чем раньше. Или это невозможно? –
@GrijeshChauhan Вы можете указать новый размер, меньший размеру старого массива. Стандарт C указывает (7.20.3.4), что 'realloc()' "освобождает старый объект, на который указывает ptr, и возвращает указатель на новый объект с размером, указанным по размеру", и что содержимое нового объекта является то же самое до min (oldSize, newSize). – JBL
Не существует C-функций как таковых. вы можете пойти на контейнер C++. У этого есть Массивы, списки и т. Д.
возможно, вы можете добиться этого, написав свою собственную оболочку управления памятью, чтобы добавить/освободить куски памяти из выделенного массива.
После много экспериментов, таких как профессора и инженеры (которые имеют реальные рабочие места в течение некоторого времени), при расширении массива расширяйте его на 50%, если у вас нет внутренней информации, которая говорит вам разные. realloc() делает все тяжелым грузом для вас тоже (объяснено далее.) Из Интернета: -> Функция realloc() изменяет размер блока памяти, на который указывает ptr, на размер байтов. Содержимое будет оставаться неизменным в диапазоне от начала региона до минимума старого и нового размеров. Если новый размер больше старого, добавленная память не будет инициализирована. Если ptr равно NULL, то вызов эквивалентен malloc (размер) для всех значений размера; если размер равен нулю, а ptr не равен NULL, тогда вызов эквивалентен свободному (ptr). Если ptr не равен NULL, он должен быть возвращен более ранним вызовом malloc(), calloc() или realloc(). Если перемещенная область была перемещена, выполняется свободное (ptr).
- 1. Увеличение массива Размер динамически
- 2. Размер динамически распределенного массива
- 3. Динамически увеличить размер массива символов
- 4. Как динамически изменять размер массива?
- 5. динамически меняет размер массива C++
- 6. Начало динамически распределяемой размер массива
- 7. Динамически Размер массива в C
- 8. Получение ArrayIndexOutOfBoundsException, размер массива определяется динамически
- 9. Динамически инициализировать размер массива в go
- 10. Динамически размер массива без жесткого кодирования
- 11. Невозможно увеличить размер массива динамически в java
- 12. Мне нужно указать размер массива динамически
- 13. Размер массива, созданного динамически, не соответствует
- 14. Как динамически увеличить размер 2D-массива
- 15. динамически увеличивать размер массива (int *) в c
- 16. Как динамически размер массива структуры в C
- 17. динамический размер массива массива
- 18. Динамически меняет размер переменной char
- 19. Размер массива
- 20. Максимальный размер массива указателей для 2D-массива?
- 21. Вставьте размер массива динамически и сохраните старые значения в массиве
- 22. Динамически назначать размер и элементы многомерного массива строк
- 23. Распределите размер массива динамически в зависимости от размера файла - C
- 24. Cocos2d: Как я могу динамически изменять размер массива объектов CCSprite?
- 25. Является ли размер хранимого где-то динамически распределенного массива?
- 26. Размер массива, динамически объявляющийся в c и C++
- 27. не должно динамически выделять размер массива C, выдает ошибку?
- 28. Как увеличить размер массива динамически без использования встроенной функции?
- 29. Как определить размер динамически распределенного массива (используя sizeof())?
- 30. Невозможно динамически установить размер массива для структурных переменных
['void * realloc (void * ptr, size_t size);'] (http://www.cplusplus.com/reference/cstdlib/realloc/) function in C –
Вам нужно решить, как на каком языке вы программируете. В C вы должны использовать 'realloc'. В C++ вы будете использовать 'std :: vector'. –