0 / 0 / 0
Регистрация: 30.05.2015
Сообщений: 2
|
||||||
1 | ||||||
Использование realloc07.12.2017, 09:26. Показов 7234. Ответов 4
Метки нет Все метки)
(
Доброго времени суток. Определен динамический массив, он вводится. Затем нужно увеличить размер этого же массива (7 строка объявление массива, 71 строка - объявление нового массива, с 72 строки - работа с новым массивом, ошибка в 91 строке):
Кликните здесь для просмотра всего текста
0
|
|
07.12.2017, 09:26 | |
Ответы с готовыми решениями:
4
Realloc Функция realloc
Проблема с realloc |
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
||||||
07.12.2017, 09:56 | 2 | |||||
Переменная a_n не нужна, сохраняйте новый адрес массива в ту же переменную:
1
|
07.12.2017, 11:50 | 3 |
realloc(a, new_size) работает следующим образом - грубо описываю:
1. делается malloc(новый_размер) во временную переменную внутри реалок 2. Если malloc() вернул NULL, то он и возвращается функцией, при этом c памятью, на которую указывает a ничего не происходит(и её можно освобождать через free()) 3.Если всё норм, то по новому адресу переносится содержимое со старого адреса (вроде даже через обычный memcpy) 4. Освобождается старая память с адресом, переданным через a, а именно free(a) 5. возвращается новый указатель Вы присвоили новый указатель a_n - в принципе правильно(но как выше сказано можно и в старую переменную a). Т.к. realoc() у вас нормально отработал, то память из переменной a он освободил через free(), а вы в 91й строке её пытаетесь повторно освободить. Во времена ДОСа и относительно простых компиляторов это приводило к дичайшим чудачествам не только проги, но и ОС в целом. Добавлено через 6 минут З.Ы. И да, для языка Си очень неправильно объявлять переменные внутри кода (в начале программного блока "{}"можно) - строки 67,71
2
|
3545 / 2215 / 402
Регистрация: 09.09.2017
Сообщений: 9,228
|
||||||
07.12.2017, 11:59 | 4 | |||||
Правильнее все-таки использовать новую переменную и проверять ее:
2
|
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
|
|
07.12.2017, 12:01 | 5 |
COKPOWEHEU, да, так будет точнее.
0
|
07.12.2017, 12:01 | |
Помогаю со студенческими работами здесь
5
Только realloc Realloc и malloc Realloc(): invalid pointer
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |