LINUX.ORG.RU

Зря ты анонимов игноришь.

l = new std::list<bar>[10];

l = new std::list<bar>(10);
Скобки перепутал.

anonymous
()

Правило Трёх/Пяти/Нуля

  std::list<bar> m_list;

  std::vector<std::list<bar>> m_lists;
  std::array<std::list<bar>, 10> m_lists;
AlexVR ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Ну да. У тебя создаётся массив из десяти std::list<bar>, соответственно, удалять его тоже надо, как массив (delete[])

XMs ★★★★★
()

в чём ошибка? munmap_chunk

Нежелание читать документацию (в узком смысле)

Днк (в широком)

ya-betmen ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

list<T> * — не умный указатель /не контейнер либо list<T>; либо std::unique_ptr<list<T>>

lberserq
()

if ( l ) delete l;

Бесполезная проверка, можно просто delete l

std::list<bar> *l;

Тебе тут нужен просто std::list<bar> l. В С++ не обязательно везде использовать new.

anonymous
()
Ответ на: комментарий от fsb4000

на зафреженый класс

Нет. Если конструктор в прайвате, то нужно френдить make_unique или создавать unique_ptr через его конструктор, что более адекватно.

Kuzy ★★★
()
Ответ на: комментарий от andreyu

Я тоже искренне надеюсь, что это код не из реального проекта

XMs ★★★★★
()
Ответ на: комментарий от XMs

Я делаю одну программу и там есть класс ( 0 ). В него входит еще класс (1), в котором есть массив такой int foo[4096][4096]; Из-за этого класс (0) когда конструктор получает параметр, программа рушится из-за того, что параметр на неправильную область памяти указывает. На сайтах искал, там пишут что переполнение стека. Класс (0) все лишь получает один параметр. Какая проблема связана с большими массивами и как их решить, если нужны большие массивы?

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Если нужны большие массивы, их надо выделять на куче. А раз уж у тебя тут C++, то используй нормальные контейнеры, которые всю работу с памятью сделают за тебя: std::vector<std::vector<T>>, либо std::array<std::array<T>>. Чтобы не писать такое уродство с указанием пространства имён, можно сделать так:

using std::vector;
…
vector<vector<T>> vec;
или так:
using std::array;
…
array<array<T>> arr;

XMs ★★★★★
()
Ответ на: комментарий от XMs

Разумеется, если тебе не нужен двумерный массив, можно сделать одномерный идентичного размера, получится чуть быстрее при обращении. А если нужен, но критически нужна скорость (нет), можно развернуть двумерную адресацию поверх одномерного массива

XMs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.