0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 37
|
||||||
1 | ||||||
Добавление элемента перед первым в динамическом массиве22.04.2020, 20:10. Показов 910. Ответов 6
Метки нет (Все метки)
Доброго времени суток. В университете дали задание написать программу, которая позволяет увеличить размер динамического массива на 1 и вставить новые элементы перед первым. Функция принимает одно значение типа int, которое и надо вставить перед первым элементом. Также увеличивается значение переменной size, которая хранит размер массива(количество элементов).
Алгоритм такой: 1. Увеличиваем размер на 1. 2. Выделяем память под новый массив. 3.Копируем все элементы, начиная со второго(индекс 1) 4. Присваиваем первому(индекс 0) элементу значение х. Ниже приведен код:
Помогите разобраться с этой ошибкой
0
|
22.04.2020, 20:10 | |
Ответы с готовыми решениями:
6
Git добавление коммита перед первым имеющимся в репозитарии Вставить в массиве 2 элемента, один перед макс, другой перед минимальным Нахождение минимального элемента в динамическом массиве Определение номера элемента в динамическом массиве |
9 / 5 / 4
Регистрация: 22.04.2016
Сообщений: 63
|
||||||
22.04.2020, 20:22 | 2 | |||||
Сообщение было отмечено 1u5t1se как решение
Решение
1
|
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 37
|
|
22.04.2020, 20:26 [ТС] | 3 |
Большое спасибо, теперь я понял, в чем ошибся. Копировал элементы не в том порядке и неправильно запустил цикл.
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
22.04.2020, 20:31 | 4 |
realloc не выделяет память, а изменяет размер уже выделенного блока. После этого писать
mas1[i+1] = mas[i]; некорректно. Если блок был перемещен, то mas указывает на нераспределенную память. Если блок остался на месте, то mas и mas1 указывают на одну и ту же память и такая запись затирает значения. Еще вопрос: как была выделена память, malloc или new?В задании конкретно сказано: Сделайте именно так.
0
|
9 / 5 / 4
Регистрация: 22.04.2016
Сообщений: 63
|
|
22.04.2020, 20:37 | 5 |
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
22.04.2020, 20:42 | 6 |
realloc здесь плох еще тем, что в случае переноса блока в памяти копирование будет выполняться дважды: первый раз при переносе, второй раз при сдвиге элементов в цикле.
0
|
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 37
|
|
22.04.2020, 20:51 [ТС] | 7 |
Память выделялась через calloc. И это не задание, это просто описание моих действий, на всякий случай.
А по заданию надо использовать именно realloc, так что все нормально, этот вариант мне пока подходит.
0
|
22.04.2020, 20:51 | |
22.04.2020, 20:51 | |
Помогаю со студенческими работами здесь
7
Поиск максимального/минимального элемента в динамическом массиве Поиск мах элемента в динамическом многомерном массиве Вычисление максимального элемента в одномерном динамическом массиве Нахождение последнего элемента и перестановка его перед первым (списки) Поиск максимального и минимального элемента в одномерном динамическом массиве Линейный однонаправленный список: удаление элемента перед первым положительным элементом Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |