0 / 0 / 0
Регистрация: 31.08.2016
Сообщений: 38
|
|||||||||||
1 | |||||||||||
Не меняет адресс массива после завершения функции17.10.2016, 20:21. Показов 845. Ответов 3
Метки нет (Все метки)
Добрый день.
Есть ф-ция которая добавляет дополнительный элемент в динамический одномерный массив. Все норм но после завершения ф-ции адрес массива меняется и распечатывается пустая область памяти. Подскажите как мне нужно поменять чтобы из функции адрес поменялся. Я так понимаю что просто он воспринимает ссылку полученную как локальную переменную ф-ции, и соответственно по завершении стек очищается а в стек вызывающей ф-ции не меняется. Когда мы в функции через адрес меняем перменные тут всё просто) А как изменить адрес внутри функции при переданном адресе я чтото не понимаю)))
такой вот вариант меня не очень устраивает, потому что хочется не приравнивать адрес исходного массива к этой ф-ции а просто писать ф-цию с входными параметрами МАССИВ и РАЗМЕР МАССИВА и получать В итоге новый массив по этому адресу. Ниже листинг очевидного варианта, но который не устраивает.
0
|
17.10.2016, 20:21 | |
Ответы с готовыми решениями:
3
Глобальная переменная после вызова функции меняет значение После выполнения (завершения) функции test переменная умрет, а что будет с переменной в Result? Вызов функции после завершения потока Запуск функции после завершения предыдущей |
Комп_Оратор)
|
|
17.10.2016, 21:40 | 2 |
o4enslabijcoder, вот это
невозможно в общем случае. Например, если новый массив больше старого, то OS просто не сможет его воткнуть на место старого, когда за ним уже занят хоть один машинный байт. То есть, сам вопрос неверен. А вот по переданному указателю можно создать новый массив. Тогда переменная будет "старая" (из области вызова), а адрес в ней - новый. Тот что new даст. Только передать нужно по указателю f(int ** arr, int & n) или ссылке f(int *& arr, int & n) иначе будет как сейчас. Функция получит копию, что-то под этот указатель выделит, и оно потеряется после возврата из функции.Вообще, выделять в одной области, а освобождать в другой это не хорошо. Если это только не метод класса, где всё учтено могучим
1
|
0 / 0 / 0
Регистрация: 31.08.2016
Сообщений: 38
|
|
17.10.2016, 22:12 [ТС] | 3 |
ну я не правильно описал)) и имелось ввиду что мы просто указатель на новый адрес перекидываем а старый удаляем)))
сейчас попробую через двойные конструкции
0
|
Диссидент
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
|
|
17.10.2016, 23:09 | 4 |
Не знаю, что ты имеешь в виду, но возможно, ты на правильном пути. Если ты в функции собираешься менять указатель, то передавать надо Указатель на Указатель.
1
|
17.10.2016, 23:09 | |
17.10.2016, 23:09 | |
Помогаю со студенческими работами здесь
4
Запуск функции после завершения предыдущей Запуск jQuery Функции повторно после ее завершения Не закрывать(уничтожать) объект после завершения функции После завершения функции заданное в ней значение переменной обнуляется Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |