![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#21 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
![]() ![]() вот написал две функции первая увеличивает размер массива на заданную величину. Вторая функция уменьшает размер массива на еденицу, уничтожается ячейка с последним номером. посмотрите так правильно будет? Код:
|
![]() |
![]() |
![]() |
#22 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
![]()
SAMOUCHKA
посмотрите так правильно будет? неправильно. при выходе из программы (а возможно и раньше) словим крэш :D подробнее объяснять лень, пусть лучше кто-нибудь другой сделает (Ж, но вкраце, функция уничтожает переданный указатель, а новое значение не возвращает. а уменьшать массив вообще смысла не имеет, тем более как у тебя - чтобы уменьшить на 1, в системе пусть и кратковременно, выделяется памяти 2 * N
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
![]() |
![]() |
![]() |
#23 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
![]() Цитата:
Во-вторых, у вас происходит утечка памяти. Вызывающая программа ничего не будет знать о том, что вы в функциях выделяете память. Дело в том, что ваш массив, который описан в виде параметра передается по значению. То есть аргумент в виде массива, который вы задаете при вызове ваших функций (или указатель) преобразуется в указатель, который является локальным для ваших функций. И при завершении работы функции этот локальный указатель удаляется. То есть вы очевидно думаете, что ваш аргумент, который вы передаете в функцию в качестве параметра int a[], получает новое значение, а на самом деле это не так, так как функция имеет дело с копией вашего аргумента. Кроме того, касаясь дизайна функции, нет никакой необходимости во временном масииве. Он просто лишний. Фактически, вы два раза вызываете delete вместо одного раза. Вам нужно переопределить функцию таким образом, чтобы она возвращала не void, а указатель на вновь выделенную память.
Со мной можно встретиться на www.clipper.borda.ru
|
|
![]() |
![]() |
![]() |
#24 |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]()
Можно и ничего не возвращать, если указатель будет передаваться по ссылке:
Код:
|
![]() |
![]() |
![]() |
#25 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
![]()
ну две функции или одна не в этом суть, тем более что функция перегруженная. скажите лучше как без временного массива обойтись???.
|
![]() |
![]() |
![]() |
#26 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]() Цитата:
1. Создаем новый массив. 2. Копируем из старого массива в новый. 3. Уничтожаем старый. 4. В указатель на старый массив записываем адрес нового массива. |
|
![]() |
![]() |
![]() |
#27 | |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
![]() Цитата:
приведите пример. код функции. ![]() а вообще этот массив будет являтся полем класса, по этому без функции, не обойтись. поле-то находится в блоке private ![]() |
|
![]() |
![]() |
![]() |
#28 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]()
Уже ведь говорили... тем что временный массив не нужен !
Код:
Цитата:
Код:
Методы класса так же можно делать друзьями другого класса ![]() |
|
![]() |
![]() |
![]() |
#29 |
Форумчанин
Регистрация: 07.08.2011
Сообщений: 576
|
![]()
на счет класса вы не так поняли, или я плохо объяснил.
я имел в виду что поле класса есть динамический массив и менять его размерность можно только посредством метода. этот метод пренадлежит етому-же классу Код:
Последний раз редактировалось SAMOUCHKA; 21.10.2011 в 23:53. |
![]() |
![]() |
![]() |
#30 |
Форумчанин
Регистрация: 11.02.2011
Сообщений: 131
|
![]()
Для динамического изменения размерности массива нужны связанные списки. Вот самый простой пример, где при добавлении в список он сортируется по возрастанию. Не знаю, конечно, насколько это понятно, но разобраться можно.
Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Изменение всего массива | RedStorm | Microsoft Office Excel | 2 | 10.04.2011 12:54 |
C++ - изменение размера массива | kefir | Помощь студентам | 1 | 19.06.2010 11:42 |
Задание размерности 2мерного массива | Bernarditto | Общие вопросы C/C++ | 2 | 18.06.2010 17:04 |
Конструктор для изменения размерности массива | and277 | Общие вопросы C/C++ | 2 | 10.08.2009 20:47 |
увеличение размерности массива | Лучик_света | Общие вопросы .NET | 3 | 25.10.2008 04:36 |