Вопрос № 109942: Здравствуйте, эксперты!
Как исправить следующую программу (по возможности только конструктор копии и деструктор), чтобы деструктор освобождал память.
Нужно сделать так чтобы память очищалась в классе, а не int main() программе. ...Вопрос № 109971: Здравствуйте уважаемые эксперты!Прошу прощение за повторение!Я неделю назад задавал вопрос по задачкам, на что получил ответ, решение этих задач на С++, не могли бы вы написать эти задачки на С!
Заранее спасибо!
1.Подсчитать, сколько элементо...Вопрос № 109989: Добрый день, уважаемые эксперты. Помогите написать программу на С. Задание: В файле хранится информация о товаре на складе: код, наименование, цена. Переписать эти данные в новый файл, отсортировав товар по стоимости, исключив предварительно товар с ...
Вопрос № 109.942
Здравствуйте, эксперты!
Как исправить следующую программу (по возможности только конструктор копии и деструктор), чтобы деструктор освобождал память.
Нужно сделать так чтобы память очищалась в классе, а не int main() программе.
Приложение:
Отправлен: 18.11.2007, 08:43
Вопрос задал: Tito (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Mystic
Здравствуйте, Tito!
Для начала необходимо подправить конструктор:
Long(char *s){
a = new char[max_size]; //Здесь Вы выделяете память в max_size байт
a = s; //А здесь Вы просто меняете значение указателя, т.е. а теперь указывает не на выделенную память, а на строку, переданную ей в параметре, а это не есть хорошо
}
Вместо a = s напишите strcpy(a, s); (точно параметров не помню, но главное, что функция эта). Так Вы скопируете строку s в строку a. В противном случае выделение памяти не имеет смысла, ведь Вы теряете указатель на эту выделенную память.
Далее в конструкторе копирования та же ситуация. Вам необходимо именно скопировать строку, а не использовать указатель на ту же строку. Просто добавьте функцию strcpy(s, ob.a); (опять же точно параметров не помню).
Соответственно с деструктором тогда будет все в порядке (если не копировать строки, а использовать указатели на одну и ту же строку, то первый delete[] ее удалит, а остальные указатели будут указывать на удаленную область памяти).
ЗЫ: насчет "7
Ответ отправил: Mystic (статус: 7-ой класс)
Ответ отправлен: 18.11.2007, 10:08
Отвечает: Воробьёв Алексей Викторович
Здравствуйте, Tito!
Деструктор будет вызваться при выходе из блока, где определена локальная переменная. Поэтому, если Вам так сильно надо освободить память в указанном месте, то делайте так:
Long z;
{
Long x("4"), y("3");
z = x + y; // вот здесь после возврата значения (x+y)
// память занимаемая (x+y) должна очиститься
}
cout << z.get();
Здравствуйте уважаемые эксперты!Прошу прощение за повторение!Я неделю назад задавал вопрос по задачкам, на что получил ответ, решение этих задач на С++, не могли бы вы написать эти задачки на С!
Заранее спасибо!
1.Подсчитать, сколько элементов встречается в данном массиве наибольшее число раз.
2.Найти минимум функции Х(в квадрате)-Е(в степени -х) методом дихотомии.
Отправлен: 18.11.2007, 12:40
Вопрос задал: Pimp (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Гальцов Андрей
Здравствуйте, Pimp!
Держите задачу №1:
За массив взят одномерный массив целочисленных - array[10]
Приложение:
--------- "The more you know, the less you need to show"
Ответ отправил: Гальцов Андрей (статус: Студент)
Ответ отправлен: 19.11.2007, 22:15
Вопрос № 109.989
Добрый день, уважаемые эксперты. Помогите написать программу на С. Задание: В файле хранится информация о товаре на складе: код, наименование, цена. Переписать эти данные в новый файл, отсортировав товар по стоимости, исключив предварительно товар с кодом Х (вводить с клавиатуры).
Заранее большое спасибо!
Отвечает: CruelHity
Здравствуйте, Svetapestova!
Вот пожалуста пример задачи! А там вы можете модефицироватье ее как хочете!
Файл in.txt доожен выглядеть так:
//***********
1 apple 3.2
2 pear 32.1
3 Apricot 11.1
/************
Удачи!
Будут вопросы спрашивайте))
Приложение:
Ответ отправил: CruelHity (статус: 5-ый класс)
Ответ отправлен: 18.11.2007, 16:47 Оценка за ответ: 5