![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
![]()
Здравствуйте! В конструкторе копирования проверка if (arg != NULL) всегда возвращает истину, почему? Нужно проверить был ли заполнен массив ранее, если да, то освободить память.
Код:
Последний раз редактировалось Uefa; 14.05.2015 в 07:05. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
![]()
в конструкторе копирования проверка if (arg != NULL) всегда возвращает истину, почему? Нужно проверить был ли заполнен массив ранее, если да, то освободить память.
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Откуда в конструкторе возмутся данные для освобождения?
Ключевое слово - конструктор. Для чего служат конструкторы? |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
![]()
конструктор копирования используется для копирования данных из одного объекта класса в другой. Если есть указатель, под который ранее была выделена динамическая память, эту память нужно освободить, иначе произойдет утечка памяти.
|
![]() |
![]() |
![]() |
#5 | ||
crafter
Форумчанин
Регистрация: 03.09.2011
Сообщений: 127
|
![]() Цитата:
Данная проверка: Код:
Цитата:
|
||
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#7 | ||
crafter
Форумчанин
Регистрация: 03.09.2011
Сообщений: 127
|
![]() Цитата:
Как, намекнул уважаемый waleri, ключевое слово здесь конструктор, что делают конструкторы? Что-то конструируют, помимо конструирования, по-умолчанию этот конструктор еще выполняет побитовое копирование объекта, если программист не переопределяет это поведение собственным конструктором копирования. Как и указано по ссылке: Цитата:
|
||
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 25.08.2013
Сообщений: 59
|
![]()
Разобрался, теперь программа работает нормально, но при завершении вылазит ошибка _Block_Type_Is_Valid (pHead->nBlockUse). Ошибка в деструкторе из-за освобождения памяти, но что я там не правильно освобождаю, не пойму. В конструкторе выделяю память arg = new float[n+1], в деструкторе освобождаю delete[] arg; В чем ошибка?
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
![]()
Кофейная гуща закончилась...
Либо 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 |