В C можете ли вы повторно использовать внутри realloc? Например, структура внутри структуры, когда вам нужно разделить их оба и перераспределить их оба. Если да, то кто-то может предоставить простой пример? Спасибо заранее.realloc in a realloc
ответ
Ваш вопрос не ужасающе ясно, но ...
Да, данная динамически распределяемой структура (например, массив структур) само по себе может содержать указатели на выделенные данные (например, различные другие массивы выделяются структуры), и вы можете перераспределять различные части независимо друг от друга.
Однако система не будет звонить realloc()
для вас, пока вы перераспределяете одну из структур; вам придется отдельно запрограммировать различные операции изменения размера.
Пример вложенных структур данных:
struct line { char *info; size_t length; };
struct section { size_t num_lines; struct line *lines; };
Можно выделить массив разделов, и перераспределить этот массив, когда это необходимо. Каждый раздел содержит массив строк, и каждый из этих массивов строк может быть независимо перераспределен.
Следовательно:
size_t num_sections = 0;
size_t max_sections = 0;
struct section *sections = 0;
if (num_sections == max_sections)
{
size_t new_max = (max_sections + 1) * 2;
struct section *new_sections;
if (sections == 0)
new_sections = malloc(new_max * sizeof(*new_sections));
else
new_sections = realloc(sections, new_max * sizeof(*new_sections));
if (new_sections == 0)
...out of memory error...
sections = new_sections;
max_sections = new_max;
}
struct section *section = §ions[num_sections++]; // Newly available section
section->num_lines = 0;
section->lines = 0;
return section;
(я предполагаю, что C99 - с объявления переменных, где я хочу их.)
Аналогичный процесс применяется для массива строк в секции, за исключением структура раздела не имеет отдельных значений для количества выделенных строк и количества фактически используемых линий. Каждая строка также имеет свою выделенную память для строки символов, конечно ...
Я вижу. Спасибо. –
Итак, вы не перераспределяете раздел, но вы перераспределяете разделы? Поэтому мне интересно, если вместо –
struct section * section = & sections [num_sections ++]; можете ли вы сделать еще один realloc? Предполагая, что у вас есть malloc. –
- 1. Realloc a string array
- 2. realloc in loop on win32
- 3. Ошибка Realloc: realloc(): недопустимый следующий размер
- 4. realloc() Failure
- 5. Ошибка Realloc
- 6. Realloc() Поведение
- 7. Задача Realloc
- 8. realloc missunderstanding
- 9. Уменьшение realloc
- 10. Realloc и Valgrind
- 11. realloc(): недопустимый следующий размер:
- 12. двухмерный динамический массив (realloc in c)
- 13. realloc in C - точное поведение и использует
- 14. Realloc double 2D array in C
- 15. Realloc UnsafeMutablePointer in Swift ошибка причины
- 16. Реализация Realloc в C
- 17. Функция realloc в C вызывает «realloc(): недействительный указатель:« Ошибка
- 18. C++ realloc(): неверный указатель
- 19. Термоусадочная матрица с realloc
- 20. Использование realloc() на стеке
- 21. realloc не работает
- 22. Использование программы realloc() crahes
- 23. Realloc return NULL
- 24. Realloc в функцию
- 25. C - ошибка памяти realloc
- 26. realloc, динамическое распределение памяти
- 27. realloc fail at shrink
- 28. Использование realloc в C++
- 29. Realloc и memmove
- 30. Realloc crash my programa
Это было бы намного легче ответить, если бы вы уточнили вопрос с помощью некоторого кода, демонстрирующего то, чего вы пытаетесь достичь. –