Форум программистов, компьютерный форум CyberForum.ru

Очистка памяти при создании массива указателей - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сохранениє и открытие картинок в PaintBox http://www.cyberforum.ru/cpp-beginners/thread276354.html
Как реализовать сохранениє и откритиє картинок в PaintBox1->Canvas?? Помогите пожалуста, наперед спасибо)
C++ Строение блок схем к программам Построить блок схемы к программам 1 #include<stdio.h> #include<conio.h> const int n=10; void main() { clrscr(); int cnt=0; int ch={0,1,2,3,4,5,6,7,8,9},i; for(i=0;i<n;i++) http://www.cyberforum.ru/cpp-beginners/thread276350.html
C++ Заполнение лидирующими нолями при неравном размере строк
Решил попробовать длинную арифметику... Начал с суммы. Реализовал собственно сумму и застопорился на добавлении лидирующих нолей=\ Например, есть 2 строки-"123" и "12345", первую необходимо привести к виду "00123" Получилось у меня примерно такое(не работает вообще) void nol(char a,char b){ int i; if (strlen(a)>strlen(b)) for (i = strlen(b)-2; i >=0; i--) { //хотел пройтись циклом с...
C++ Реализовать n-арное дерево в виде класса
Помогите решить задачу. Нужно реализовать дерево в виде класса. Так же в классе нужно написать методы(функции) поиск елемента по индексу, добавления нового елемента к существующему по введенному индексу. Что-то никак неполучается реализовать функции добавления и поиска елементов. Вот что-то я написал но ничего никак не работает. #include <iostream> #include <stdio.h> #include <stdlib.h>...
C++ Абстрактные классы, наследование http://www.cyberforum.ru/cpp-beginners/thread276311.html
Задание: Написать базовый абстрактный класс «фигура» (с чистыми виртуальными функциями: нарисовать, передвинуть, повернуть) и два класса наследника окружность и квадрат, с различной реализацией этих функций. В основной программе создать массив указателей базового класса на объекты классов наследников. Передвинуть все объекты на одинаковое расстояние. Помогите плиз, кто чем может=) ...
C++ учебники Доброго времени суток, уважаемые программисты. Посоветуйте пожалуйста учебники для c++ что бы за пол года освоить и выйти хотяб на республиканскую олимпиаду. Желательно по матрицам(типо города, найти кратчайший путь, и т.п.) подробнее

Показать сообщение отдельно
HectorIT
Сообщений: n/a
14.04.2011, 20:27     Очистка памяти при создании массива указателей
Здравствуйте. Было дано задание создать класс Library, в котором будет реализован массив указателей класса Total и метод для подсчета средней суммы из всего этого массива. В main() в цикле while происходит создание указателей Total, а затем очистка памяти. Пытался реализовать следующим образом, однако понимаю, что в таком случае проблема с памятью неизбежна. Подскажите, как можно реализовать такой механизм.

Функция main()

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
do // Начало цикла для ввода данных
{
 
...
// Ввод данных type, title, dtr, price, number
 
...
 
Total *pTotal;              
pTotal = new Total( type, title, dtr, price, number );  
run(pTotal );                                           
pTotal->write();                                        
pTotal->print();        
                            
Library warehouse;
            
warehouse.add(pTotal);
warehouse.count();
warehouse.printAverageSumm();
 
delete pTotal;  // Здесь получается удаление еще нужных данных, однако, если их не удалить, в следующей итерации не получится создать еще один указатель.                           
 
            cout << "Would you like to add more devices?" << endl
                << "Type 1 for yes and 2 for no: ";
            cin >> n;
 
            if ( n == 1 )               
                continue;
            else                        
                break;
    }
    while( 1 );
Реализация класса Library (возможно ошибка где-то здесь)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
class Library
{
public:
    Library();
    void printAverageSumm();
    void count();
    void add( Total * );
private:
    Total ** array;
    int n;
    int averageSum;
};
 
 
Library::Library()
{
    averageSum = 0;
    n = 50;
    array = new Total*[n];
}
 
void Library::add( Total * newElement )
{
    int k = 0;
    for ( int i = 0; i < n; i++ )
    {
        if ( array[i] == NULL )
        {
            array[i] = newElement;
            k = 1;
        }
 
        if ( k == 1 )
            break;
 
    }
}
 
void Library::count()
{
    int i = 0;
    int sum = 0;
    while( array[i + 1] != NULL )
    {
        sum += ( array[i]->total );
        i++;
    }
 
    averageSum = sum / ( i + 1 );
}
 
void Library::printAverageSumm()
{
    cout << "Average sum is equal to: " << averageSum;
}
Буду благодарен за помощь.

Добавлено через 4 часа 56 минут
Помощь больше не требуется, разобрался сам.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru