Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 138
#1

Работа с памятью - C++

28.10.2010, 16:08. Просмотров 1203. Ответов 7
Метки нет (Все метки)

Всем доброго времени суток. Почитав данный форум и проч. пришёл к выводу, что мой проект на C# нереален в виду бестолковой работы с памятью. В общем задача такова. Есть класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
class oAlternativa
{
public:
    oAlternativa(void);
    oAlternativa(int *init,int count);
    virtual ~oAlternativa(void);
    int *Ves;
    int nSize;
    int nFrom;
    int nTo;
    int ID;
};
сейчас в диструкторе написано:
C++
1
2
3
4
oAlternativa::~oAlternativa(void)
{
    if (!Ves==NULL) delete(Ves);
}
Верно ли это и достаточно ли?
Есть ещё один класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma once
#include <list>
#include <iostream>
#include <fstream>
using namespace std;
#include "oAlternativa.h"
 
class oUzel
{
private:
    list<oAlternativa> BestWays;
public:
    oUzel(void);
    ~oUzel(void);
    list<oAlternativa> Sources;
    list<oAlternativa> Dests;
    int AddWay(oAlternativa Way);//Добавление к набору BestWays одного из элементов
    int DelWay(int WayID);//Удаление из набора BestWays элемента(ов) у которых ID=WayID
};
Про добавление к набору вопросв нет, а вот как реализовать удаление из набора чтобы память очистить от того, что не нужно? Заранее всем спасибо за ответ.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2010, 16:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с памятью (C++):

работа с памятью - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Работа с памятью - C++
Всем привет! Не могу разобраться, как написать код программы, которая моделирует механизм виртуальной памяти. Кто сможет реализовать хотя...

Работа с памятью - C++
Есть приложение,в нем есть label'ы. Есть ли какая-нибудь возможность средствами C++ допустим, перевести эти контролы? Если есть - дайте...

Работа с памятью в С++ - C++
Здравствуйте. Если я правильно понимаю, то при запуске программы, программе выделяется определенное кол-во памями, которое оно может...

Работа с памятью - C++
Нужно ривести пример использования операторов new и delete для выделения памяти под двумерный массив и освобождения памяти двумерного...

Работа с памятью - C++
Может кто хорошо понимает механизм выделения и освобождения памяти объяснить его, а то я в конец запутался с ним, вот помогал одному...

7
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
28.10.2010, 16:12 #2
red_88, У списка впринципе свой сборщик...
C++
1
2
3
4
oAlternativa::~oAlternativa(void)
{
        if (Ves==0) delete(Ves);
}
Но все зависит от того простой указатель это или же массив... Т.е. идет ли под него выделение памяти под N элементов
0
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 16:16 #3
речь шла про удаление из набора.
Я не силен в STL но что то смутно помню надо пользоваться функциями find чтобы найти все значения удовлетворяющие какому то критерию. Затем удалить их из списка.
0
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 138
28.10.2010, 16:20  [ТС] #4
Да, речь идёт о динамическом массиве. Причем его величина не очень велика (до 10), но вот количество объектов oAlternativa скорее всего перевалит за 9 000 000 000.
0
Sudoki
124 / 64 / 1
Регистрация: 19.04.2010
Сообщений: 196
28.10.2010, 16:27 #5
Это при малом 8Гб информации.
0
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 138
29.10.2010, 17:20  [ТС] #6
8 Гб оперативки в наличии
Главное чтобы сильно не свопило

Добавлено через 2 часа 3 минуты
Может кто-нибудь подсказать по второму вопросу? Про удаление массива проще,а вот как list'ом пользоваться, для меня тёмный лес после фреймворка.

Добавлено через 22 часа 20 минут
Неужели никто list'ом не пользовался?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
29.10.2010, 17:57 #7
red_88, Список
Конкретно нужно мне кажется вот это:
Remove_if для списка
1
red_88
6 / 6 / 0
Регистрация: 10.02.2009
Сообщений: 138
30.10.2010, 14:49  [ТС] #8
Lavroff, а remove_if удаляет только ссылку на объект в листе или сам объект из памяти тоже? Дело в том, что количество удалений будет много больше размерности задачи и если удаляются только ссылки то памяти понадобится ого-го

Добавлено через 1 минуту
что-то должно быть с грамотным вызовом erase, в этом у меня главная проблема

Добавлено через 15 часов 25 минут
Написал таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once
#include <list>
using namespace std;
#include "oAlternativa.h"
 
class oUzel
{
public:
    oUzel(void);
    oUzel(int n);
    ~oUzel(void);
    list<oAlternativa> BestWays;
    int num;
    list<oAlternativa> Sources;
    list<oAlternativa> Dests;
    int TryAdd(oUzel Source,oAlternativa way);
    bool del_marck (const oAlternativa& value) { return (value.nFrom==0); }
    int AddWay(oAlternativa Way)//Добавление к набору BestWays одного из элементов
        {   Way.nFrom=1;    BestWays.push_back(Way);    return 1;}
    int DelWay(oAlternativa Way)//Удаление из набора BestWays элемента
        {   Way.nFrom=0;    BestWays.remove_if(del_marck);  return 1;}
};
Но на строку с объявлением функции del_marck выдаёт следующую ругань:
Код
1>c:\users\user\documents\visual studio 2010\projects\mdp\mdp\ouzel.h(21): error C3867: oUzel::del_marck: в вызове функции отсутствует список аргументов; используйте "&oUzel::del_marck" для создания указателя на член
Я так понимаю, функцию надо было объявлять либо вне класса либо как то указать, что поиск ведётся именно по листу BestWays?
0
30.10.2010, 14:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2010, 14:49
Привет! Вот еще темы с ответами:

Работа с памятью - C++
Добрый день всем. Я только начал изучение C#(раньше работал c: C++ маленько -т.е. общее представление о нем имею) и у меня вопрос, можно...

работа с памятью - C++
Доброго времени суток! У меня возникло затруднение - нужно реализовать на языке Си программу,демонстрирующую распределение памяти таким...

Работа с памятью - C++
Форумчане, доброго времени суток. Заранее извиняюсь за нубские вопросы, но должен разобраться в теме. Суть такова: написал class...

Работа с памятью (массивом) - C++
Добрый вечер! Что-то запутался совсем. Дело простое и эффективные ключевые слова для гугла подобрать не могу! :) HGLOBAL hMem =...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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