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

Объекты. Как правильно инициализировать и удалить перемнные - C++

Восстановить пароль Регистрация
 
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
27.11.2012, 03:29     Объекты. Как правильно инициализировать и удалить перемнные #1
Есть довольно сложная задача. 1-й класс считает. 2-й класс делает интерфейс.
Первый от второго получает значения переменных и создает кучу массивов, в т.ч. массивов структур. Как правильно организовать выделение памяти под массивы и другие динамические переменные. Есть проблема утечки памяти, вроде все динамические массивы и переменные убиты в конце.
Если я не прав, подскажите как организовать обмен между этими объектами этих двух классов.
Спасибо.
PS. Сейчас интерфейс на QT, но может потребоваться его делать под другой фреймворк.

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
/*
 * Calc.h
 *
 *  Created on: 06.12.2010
 *      Author: admin
 */
#ifndef CALC_H_
#define CALC_H_
class Calc
{
private:
   struct trans {...} *marr; 
   double *mas;  
   ....
  и разные методы.
public:
    Calc();
    ~Calc();
    int n;
...
    void Init();
    void CalcIt();
 
};
#endif /* CALCS_H_ */
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Calc::Calc()
{
    Pi=3.1415926535897931;
}
Calc::~Calc()
{
    
    delete [] mas1 аналогично и остальные массивы
 
}
 
void CalcSat::Init()
{
    /*
        функция начальной инициализации перемнных класса,
    */
    vect =   new trans[n](); // 
    vect1=   new double [n]();
    Calc::mas1  = new double[pointX.masDim * pointY.masDim*sizeof(double)](); 
    Calc::mas2 = new double[pointX.masDim * pointY.masDim*sizeof(double)]();
     и.т.д.
и еще
struct trans {...} *marr; в заголовочном файле
и
marr = new trans[n]() в void CalcSat::Init(); cppcheck ругается на подобную строку в Init и говорит, что
Possible leak in public function. The pointer 'marr' is not deallocated before it is allocated.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2012, 03:29     Объекты. Как правильно инициализировать и удалить перемнные
Посмотрите здесь:

Как правильно инициализировать статические члены класса? C++
C++ Как правильно массиву объектов присвоить ссылки на объекты.
Как правильно инициализировать сложный объект? C++
динамически создать/удалить объекты класса (правильно сделал?) C++
подскажите, как правильно составить алгоритм (Матрицы. Удалить заданную строку a и столбец b со сдвигом) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,584
Записей в блоге: 17
27.11.2012, 04:36     Объекты. Как правильно инициализировать и удалить перемнные #2
Как правильно инициализировать и удалить перемнные
В конструкторе инициализировать и выделить память если надо , в деструкторе освободить память если она выделялась.

Чтобы облегчить себе задаю вместо дин.массивов используйте std::vector ( или QVector ) что бы не заботиться об освобождении памяти.

Добавлено через 7 минут
C++
1
2
3
4
    vect =   new trans[n](); // 
    vect1=   new double [n]();
    Calc::mas1  = new double[pointX.masDim * pointY.masDim*sizeof(double)](); 
    Calc::mas2 = new double[pointX.masDim * pointY.masDim*sizeof(double)]();
По убирайте скобки ()
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
27.11.2012, 11:25  [ТС]     Объекты. Как правильно инициализировать и удалить перемнные #3
Спасибо,но как в конструктор передать размерности массивов?
() обнуляют массивы, или я что-то не так понимаю?
vxg
Модератор
 Аватар для vxg
2662 / 1673 / 157
Регистрация: 13.01.2012
Сообщений: 6,224
27.11.2012, 11:42     Объекты. Как правильно инициализировать и удалить перемнные #4
в пустом конструкторе всем указателям и размерам присвоить нули.
в функцию инициализации предавать размер, присваивать его полю объекта, выделять память.
в деструкторе освобождать память
Yandex
Объявления
27.11.2012, 11:42     Объекты. Как правильно инициализировать и удалить перемнные
Ответ Создать тему
Опции темы

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