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

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

Восстановить пароль Регистрация
 
HectorIT
Сообщений: n/a
14.04.2011, 20:27     Очистка памяти при создании массива указателей #1
Здравствуйте. Было дано задание создать класс 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 минут
Помощь больше не требуется, разобрался сам.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2011, 20:27     Очистка памяти при создании массива указателей
Посмотрите здесь:

динамическое выделение памяти и обработку массива с применением указателей C++
Использование указателей при создании обьекта C++
C++ Очистка памяти массива (С++)
C++ При работе начинаются притормаживания (нужна очистка памяти?)
C++ Динамическое выделение памяти для массива указателей на char
C++ Ошибка при переборе массива с использованием указателей
Нехватка памяти при создании динамических объектов C++
C++ Передача массива указателей в функцию для выделения памяти

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru