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

Не чиститься память при разрушении класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Инкапсуляция строк http://www.cyberforum.ru/cpp-beginners/thread1091884.html
Приветствую! Как сделать инкапсуляцию строк? Например: Допустим, для целых чисел можно использовать: enum class Colors { RED = 0, GREEN = 12, BLUE = 23, };
C++ При помощи цикла показать на экран календарь текущего месяца При помощи цикла показать на экран календарь текущего месяца. http://www.cyberforum.ru/cpp-beginners/thread1091861.html
C++ Нажатие клавиши без ожидания Enter
Как в c++ сделать так, что бы при нажатии какой-то клавиши, программа(консоль) сразу выполняла действие , а не ждала пока введут этот символ. Например if (c == "d") cout << "-"; только что бы прога не ждала нажатие enter, и не писала на экране букву d. Хочу типо консоль-змейки написать ???
C++ Переопредения нуля для структуры (класса)
Пишу клас дробей вида (sqrt(f)+n)/d. Нужно проверять равна ли такая дробь нулю, тоесть (f==0&&n==0) но так писать каждый раз не удобно, и нет прямого доступа к полям переменных (frac.f, frac.n, frac.d). Можно как-то переопределить ноль для класса, или оператор "==", "!=" чтоб можно было записать так frac x; ........ if (x==0) ....
C++ При помощи цикла показать на экран календарь текущего месяца. http://www.cyberforum.ru/cpp-beginners/thread1091833.html
При помощи цикла показать на экран календарь текущего месяца.
C++ Написать программу, которая выводит на экран полый прямоугольник, ширина и высота фигуры задаются пользователем с клавиатуры. Написать программу, которая выводит на экран полый прямоугольник, ширина и высота фигуры задаются пользователем с клавиатуры. подробнее

Показать сообщение отдельно
admsasha
14 / 14 / 4
Регистрация: 11.06.2011
Сообщений: 212

Не чиститься память при разрушении класса - C++

08.02.2014, 08:04. Просмотров 230. Ответов 3
Метки (Все метки)

Сделал небольшой пример tcp сервера.
http://rusfolder.com/39763465

Он принимает строки, разделенные \n и пересылает их обратно. Если слать небольшими порциями пакеты, то всё работает нормально. Если я вышлю очень большую порцию пакета, например "test\ntest\ntest\n" и так. несколько тысяч, cервер заполняет массив writeBuffer данными и память раз растает до 100MB, это нормально и понятно. НО когда сессия завершается эта память не очищается. По выводу "~session" я увижу, что деструктор сработал, но все теже 100MB как были так и висят. valgrind никакой утечки памяти не показал. Если повторно подключиться и выслать такой же большой пакет, то память просумируется. И уже будет 200MB занятой памяти. Почему память не очищается при завершении session ? Массив writeBuffer должен очищаться при уничтожении session или я ошибаюсь ? Почему память разрастается, я понимаю, но почему не очищается нет...


Код примера тестирования.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  try {
        boost::asio::io_service io_service;
 
        tcp::socket s(io_service);
        tcp::resolver resolver(io_service);
        boost::asio::connect(s, resolver.resolve({"localhost", "1234"}));
 
        char request[max_length]="test\n";
        size_t request_length = std::strlen(request);
        char reply[max_length];
        std::string buffer="";
        for (int i=1;i<10000000;i++){
            boost::asio::write(s, boost::asio::buffer(request, request_length));
        }
 
    }catch (std::exception& e){
        std::cerr << "Exception: " << e.what() << "\n";
    }
OS: kernel 3.10.19
gcc версия 4.7.3 20121001
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru