|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.05.2015, 19:05 | #1 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
C++ освоббождение памяти
Здравствуйте! В конструкторе копирования проверка if (arg != NULL) всегда возвращает истину, почему? Нужно проверить был ли заполнен массив ранее, если да, то освободить память.
Код:
Последний раз редактировалось Uefa; 14.05.2015 в 07:05. |
13.05.2015, 19:07 | #2 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
в конструкторе копирования проверка if (arg != NULL) всегда возвращает истину, почему? Нужно проверить был ли заполнен массив ранее, если да, то освободить память.
|
13.05.2015, 19:57 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Откуда в конструкторе возмутся данные для освобождения?
Ключевое слово - конструктор. Для чего служат конструкторы? |
13.05.2015, 20:00 | #4 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
конструктор копирования используется для копирования данных из одного объекта класса в другой. Если есть указатель, под который ранее была выделена динамическая память, эту память нужно освободить, иначе произойдет утечка памяти.
|
13.05.2015, 20:20 | #5 | ||
crafter
Форумчанин
Регистрация: 03.09.2011
Сообщений: 127
|
Цитата:
Данная проверка: Код:
Цитата:
|
||
13.05.2015, 20:49 | #6 | |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
Цитата:
|
|
13.05.2015, 21:17 | #7 | ||
crafter
Форумчанин
Регистрация: 03.09.2011
Сообщений: 127
|
Цитата:
Как, намекнул уважаемый waleri, ключевое слово здесь конструктор, что делают конструкторы? Что-то конструируют, помимо конструирования, по-умолчанию этот конструктор еще выполняет побитовое копирование объекта, если программист не переопределяет это поведение собственным конструктором копирования. Как и указано по ссылке: Цитата:
|
||
14.05.2015, 07:10 | #8 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
Разобрался, теперь программа работает нормально, но при завершении вылазит ошибка _Block_Type_Is_Valid (pHead->nBlockUse). Ошибка в деструкторе из-за освобождения памяти, но что я там не правильно освобождаю, не пойму. В конструкторе выделяю память arg = new float[n+1], в деструкторе освобождаю delete[] arg; В чем ошибка?
|
14.05.2015, 09:10 | #9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Кофейная гуща закончилась...
Либо arg изменился либо вызываете delete [] arg более одного раза. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Памяти | VladimirAvakov | Общие вопросы C/C++ | 0 | 28.05.2014 23:01 |
Задача-найти объем оперативной памяти по шестнадцатеричному адресу последнего байта оперативной памяти | Ksana Alex | Помощь студентам | 4 | 14.11.2013 15:51 |
Распределение памяти. Динамическое выделение памяти с++ | Tolian92 | Помощь студентам | 8 | 14.05.2012 21:44 |
Программа для тестирования памяти, тестирование ячеек памяти | Hunter557 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 30.01.2011 19:20 |
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти | ]tach[ | Общие вопросы C/C++ | 1 | 19.01.2011 13:16 |