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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
#1

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

27.11.2012, 03:29. Просмотров 402. Ответов 3
Метки нет (Все метки)

Есть довольно сложная задача. 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++
создал класс: myclass { } завел вектор, в котором будут храниться указатели на объекты данного класса: vector <myclass*> ob; ...

Как правильно инициализировать сложный объект? - C++
Есть три класса: 1) point ->(double z, double y) 2) frame ->содержит CArray<point*,point*> 3) hull ->содержит CArray<frame*,frame*>...

Как правильно массиву объектов присвоить ссылки на объекты. - C++
TPoint Point,*p_Point; p_Point = Point; TPoint Mass; for (i=0; i<10; i++) { Mass = p_Point; //вот не задвоятся ли у меня...

Как правильно объявлять статические константные объекты в классе? - C++
В классе надо объявить статичные константные строки. Типа class A { public: static const std::string OLOLO = "ololo"; } Но так...

Как правильно удалить строку из файла? - C++
void deletez(char db) {data *p; int nomer; readdb(db); ofstream f; f.open(db); cout<<"kakoy nomer udalit?"<<endl; ...

Удалить повторяющиеся объекты в векторе - C++
Есть 2 вектора. Копируем один вектор во второй. Потом во втором нужно удалить все объекты, в которых присутствуют одинаковые поля...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Эксперт С++
7121 / 5298 / 273
Регистрация: 10.12.2010
Сообщений: 23,436
Записей в блоге: 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
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
27.11.2012, 11:25  [ТС]     Объекты. Как правильно инициализировать и удалить перемнные #3
Спасибо,но как в конструктор передать размерности массивов?
() обнуляют массивы, или я что-то не так понимаю?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2012, 11:42     Объекты. Как правильно инициализировать и удалить перемнные
Еще ссылки по теме:

Как инициализировать структуру - C++
имеется структура point {int x; int y;} вопрос таков как мне не создавая переменной передать структуру в функцию т.е. struct point...

Как инициализировать массивы? - C++
Я пытаюсь сдать проверочную преподавателю , задания он дает легкие , но даже если результат получается тот , который необходим, он хочет ,...

Как инициализировать переменные? - C++
Здравствуйте. Где можно полно осведомиться о том как инициализируются переменные в C++ для каждого типа?

Как инициализировать массив в dll ? - C++
Экспериментирую с dll. Сделал графическую функцию, которая рассчитывает расстояние между точками в цикле. Хочу оптимизировать ее, чтоб...


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

Или воспользуйтесь поиском по форуму:
vxg
Модератор
3144 / 1946 / 214
Регистрация: 13.01.2012
Сообщений: 7,438
27.11.2012, 11:42     Объекты. Как правильно инициализировать и удалить перемнные #4
в пустом конструкторе всем указателям и размерам присвоить нули.
в функцию инициализации предавать размер, присваивать его полю объекта, выделять память.
в деструкторе освобождать память
Yandex
Объявления
27.11.2012, 11:42     Объекты. Как правильно инициализировать и удалить перемнные
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru