170 похожих чатов

Плиз ребзя подскажите, есть ли у мен\ утечки памяти, задана

сортировка слиянием списка, именно списка!! Меня интересует, там где я присваиваю список из массива другому списку
#include <iostream>
#include <list>

typedef std::list<int> Mylist;

void mergeSort(Mylist &list)
{
//длина списка
int n = list.size();
Mylist a;
Mylist b;

//------------разбиение на два списка----------------
while (list.size() > 0)
{
a.push_back(list.front());
list.pop_front();

if (list.size() > 0) {
b.push_back(list.front());
list.pop_front();
}
}
//---------------------------------
//q - размер a; r - размер b; m - размер a + b
int q, r, m;
Mylist arrLists[2];
// размер серий
int p = 1;
//активная очередь
int i;

while (p < n)
{
i = 0;
m = n;
arrLists[0].clear();
arrLists[1].clear();
while (m > 0)
{
q = (m >= p) ? p : m;
m -= q;
r = (m >= p) ? p : m;
m -= r;
//------------слияние списков a и b в c_i-------------

while (q > 0 && r > 0)
{
if (a.front() < b.front()) {
arrLists[i].push_back(a.front());
a.pop_front();
q--;
}
else
{
arrLists[i].push_back(b.front());
b.pop_front();
r--;
}
}
while (q > 0)
{
arrLists[i].push_back(a.front());
a.pop_front();
q--;
}

while (r > 0)
{
arrLists[i].push_back(b.front());
b.pop_front();
r--;
}
//-----------------------------------------
i = 1 - i;
}
a = arrLists[0];
b = arrLists[1];
p *= 2;
}

list = arrLists[0];
}

int main()
{
Mylist list = { 2, 4, 6, 1, 9, 0, 4, 6, 3, 10 };
mergeSort(list);
for (auto el : list)
{
std::cout << el << " ";
}
std::cout << std::endl;
}

15 ответов

13 просмотров

проверяй при помощи valgrind

Антон- Автор вопроса

я сейчас скомпилил твой код и проверил

Ты хоть в одном месте память-то выделяешь? Где хоть одно выделение динамическое объектов ?

Антон
Нет, все статическое

Тогда откуда бы утечки взялись..

Антон- Автор вопроса
Ilya Zviagin
Тогда откуда бы утечки взялись..

Я думал сам список внутри использует динамическое выделение и его надо убивать

Антон- Автор вопроса
Ilya Zviagin
использует. Не надо.

А при присвоении списка в другую переменную, он полностью скопируется? То есть будет выделена новая память?

Антон- Автор вопроса
Ilya Zviagin
да

А если это список инстансов объектов, как мне этот список присвоить в другую переменную, чтобы не создавались новые объекты?

Антон- Автор вопроса
Ilya Zviagin
Никак

А что делать? Список указателей на объекты, все же вычисления сбросятся при создании новых инстанс

Антон
А что делать? Список указателей на объекты, все же...

Список указателей на объекты длеать. Что там сбросится — не понял.

Антон- Автор вопроса
Ilya Zviagin
Список указателей на объекты длеать. Что там сброс...

В объекте вычисление и его в список добавил, а потом список присвоил в другую переменную,создадуться новые объекты и вычисления пропадут?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта