1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
1 | ||||||
Добавить значение в конец динамического массива (имитация функции вектора)09.12.2012, 11:20. Показов 4892. Ответов 19
Метки нет (Все метки)
Интересует правильное освобождение памяти при подобном программировании. Возможно я освобождаю не так. Т.е. интересует как правильно освобождать, если выделялась в функциях. Например если я внутри отдельной функции выделю новую ячейку памяти в конец массива, запишу туда элемент, то как правильно освобождать потом. Интуитивно понимаю, что именно этот новый элемент не удалится, если использовать освобождение так как прописано у меня. Не интересует vector, интересует велосипед.
0
|
09.12.2012, 11:20 | |
Ответы с готовыми решениями:
19
Добавить в конец динамического массива новый элемент Как добавить в конец двумерного динамического массива строку? Функция: посчитать сумму элементов динамического массива, перераспределить память и добавить сумму в конец Если в массиве присутствует заданное значение - удалить его, иначе добавить в конец массива |
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
||||||
09.12.2012, 11:46 | 2 | |||||
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
09.12.2012, 11:57 [ТС] | 3 |
Может и работает иногда, но в коде есть ошибка. В вашем, Nixy
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
09.12.2012, 12:02 [ТС] | 4 |
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
09.12.2012, 12:07 | 5 |
а так что темп это адрес скажем 00000 вы выделили под него 5 адресов типа инт каждый по 4 байта последний эллемент бужет 00020, а потом вы делаете как вы говорите тыкание носом, скажем в адрес 00024, это начало массива адресов P, и каким таким образом темп будет помнить о том что его то значения 00000-00020? никаким в этом то и ошибка, фактически у вас стало два массива P старого размера, насчет ошибки, у меня все работает, возможно это ошибки дебага, запускайте без дебага
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
09.12.2012, 12:09 [ТС] | 6 |
Как там терялась понял, но все равно ошибка осталась.
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
09.12.2012, 12:10 | 7 |
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||||||||||||
09.12.2012, 13:14 [ТС] | 8 | |||||||||||||||
Ctrl+F5 запускаю.
============= Там еще одна утечка. Может из-за нее? P утекает. еще не исправил я, может поможет Добавлено через 4 минуты не помогло. ошибка Добавлено через 16 минут
Добавлено через 22 минуты
Вопрос с освобождением памяти остался Добавлено через 14 минут До 50 теперь норм, дальше ошибка
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|||||||||||
09.12.2012, 13:21 | 9 | ||||||||||
я не понимаю что ты мудришь? мой код замечательно работает
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
09.12.2012, 14:32 [ТС] | 10 | |||||
В main
Добавлено через 7 минут В обоих случаях неверно 1. Не то выводит 2. Ошибка. ============== поэтому мудрю. Добавлено через 51 минуту неправильно освобождаете кучу (мало ли кто-то прочтет, возьмет в привычку и потом будет страдать)
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
||||||
09.12.2012, 14:35 | 11 | |||||
если убрать delete P , то будет работать вот так
Код
0
|
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
|
|
09.12.2012, 14:39 | 12 |
daslex, Дам простой совет, сразу приношу извинения, если вам это известно (я не читал все сообщения). Вектор - класс, содержащий динамический массив, в котором есть capacity - это реальная длина дин. массива, а size - его формальная длина, и если size >= capacity вектор создаёт новый дин. массив длины capacity * 2 и помещает в начало старый вектор
Добавлено через 59 секунд daslex, и ещё, у вас вообще нету ооп, а только функционал, попробуйте написать класс vector
1
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
09.12.2012, 14:41 | 13 |
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
09.12.2012, 15:05 [ТС] | 14 |
Тут как бы с одной стороны мелочь
delete P; //Это как голову отрубили, а остальное всё как Ленин в Мавзолее delete []P; //Это удаление массива я об этом. =============== Вот, что у меня с вашим последним кодом
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
09.12.2012, 15:29 | 15 |
ужас какой, возможно дело в том что делаем delete tmp, мой компилятор мусором не забрасывает ,а у вас бросает, получается delete P можем оставить но вот после строки *P=tmp tmp удалять нельзя так как получается что мы удалим и все содержимое P. мойже компилятор наоборот ругался на удаление Р а тмп удалять разрешает
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
09.12.2012, 15:37 [ТС] | 16 |
У меня Visual Studio 2005
У вас очевидно новее, поэтому каким-то макаром может исправлять возникающий недочет. Но, думаю, согласитесь, что сменить компилятор не выход. Если есть проблема, лучше понять почему она возникает. Надеюсь выход найдется. В любом случае решение есть и наверняка оно до безобразия просто.
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|
09.12.2012, 15:42 | 17 |
у меня совсем не VS ,да вы правы я сам плохо понимаю освобождение памяти, сижу разбираюсь)
0
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
||||||
09.12.2012, 17:40 [ТС] | 18 | |||||
Решил)))
Но почему так выходило не понял всё равно
Хотелось бы увидеть код попроще.
0
|
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
|
|||||||||||
09.12.2012, 17:51 | 19 | ||||||||||
работает и у меня, вся суть в этих строках
даже не в 2 а в одной имено вот в 1 , если правильно удалять Р
1
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
|
|
09.12.2012, 18:23 [ТС] | 20 |
Может кто не поверит - сам.
Маленький опыт есть. Делал блог (там теория C++ 3.1 dos) -пока блог делал, получил чуть-чуть знаний. Дальше методом проб миллиона догадок удалось подобрать)) Добавлено через 25 минут Что-то мне кажется, что так неправильно и высокая вероятность сбоя.
0
|
09.12.2012, 18:23 | |
09.12.2012, 18:23 | |
Помогаю со студенческими работами здесь
20
Добавление элемента в конец динамического массива Добавление элемента в конец динамического массива! Как в конец вектора положить случайное значение? Как вызвать метод вектора из динамического массива? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |