|
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251
|
||||||||||||||||
Аллокатор памяти, ошибка Fatal glibc error: malloc assertion failure in sysmalloc30.04.2025, 10:20. Показов 9884. Ответов 19
Добрый день.
Я попытался написать свой аллоктор памяти (первый раз в жизни). Конечно он работает не так как ожидалось, поэтому появился примерно 1 миллион вопросов. Собственно вот мой код
2) если поставить const long ALL = 400; то вроде как работает, а если const long ALL = 100; то сразу вылетает ошибка
В целом, я пытаюсь написать некое подобие линейного аллоктора (не копирую чужой код и не подсматриваю в гугл, ну просто чтобы понять как это делать). Но видимо у меня еще и ошибка в логике самого алгоритма. Буду признателен за любые советы.
0
|
||||||||||||||||
| 30.04.2025, 10:20 | |
|
Ответы с готовыми решениями:
19
Ошибка Fatal glibc error: malloc.c:2599
Ошибка Assertion failure |
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||
| 30.04.2025, 13:07 | |||||
Вам лучше писать с нуля чем брать чужой говнокод. Больше пользы и понимание будет, в итоге и опыта. Посмотрел. chanck???Добавлено через 14 минут Но это ещё не всё. Но вектор с указателями очищать то нужно, в вечном цикле...
0
|
|||||
|
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251
|
|
| 30.04.2025, 13:08 [ТС] | |
|
это мой говнокод, я его сам придумал.
но поскольку это первая в моей жизни попытка написать аллокатор, то что вышло то вышло. Зачем вы берете указатель у указателя, вашего буфера chanck??? ТОЧНО!!!!! ой, нет тут всё верно - вроде Ладно вы забили болт на вызов delete... для вашего плоского объекта... Но вектор с указателями очищать то нужно, в вечном цикле... А зачем delete? для "аллокатора" ? Очистил вектор и вроде поперло, но еще поэсперементирую.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 30.04.2025, 13:20 | ||
|
Конструктор для него был вызван? Был. А деструктор был вызван? Кто будет его внутренние ресурсы освобождать? Добавлено через 1 минуту p.s. я поправил, не delete, а именно нужен вызов деструктора, что и делает delete. Но ваш аллокатор сказал -: "не моё это царское дело, заборы красить". А чьё? Добавлено через 4 минуты Просто вы делаете всё тяп ляп. Нет целостности, поэтому у вас будет много логически ошибок. В программировании нужен порядок. И зачем перегружать new delete для какого то класса что бы потестить аллокатор?
0
|
||
|
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251
|
||||||
| 30.04.2025, 13:31 [ТС] | ||||||
|
опытным путем установил что если в строке const long ALL = 400; поставить значение более 483 - происходит ошибка
Добавлено через 2 минуты Просто вы делаете всё тяп ляп. Нет целостности, поэтому у вас будет много логически ошибок. В программировании нужен порядок. И зачем перегружать new delete для какого то класса что бы потестить аллокатор? не тяп ляп, а первый раз - не до конца понимая происходящее. И да - чтобы потеснить код, проверить что будет - а если? Кто будет его внутренние ресурсы освобождать? я думал что смысл как раз в том, чтобы не освобождать их. Память выделена, и пишем в неё то что есть. Это не так ?
0
|
||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||||
| 30.04.2025, 13:51 | |||||||||
|
Например там где вы делаете new для ass_i. В main(). Почему нет delete? В самом аллокатере так же есть new для chanck и нет delete. Вот эти моменты и есть тяп-ляп. Вот вкратце про std::allocator :
А, вот, пример использования аллокатора. Зачем вы сходу себе всё усложнили с пользовательским оператором new delete ?
0
|
|||||||||
|
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251
|
||||||
| 30.04.2025, 14:09 [ТС] | ||||||
|
Зачем вы сходу себе всё усложнили с пользовательским оператором new delete ?
Просто я был уверен, что это именно так должно работать. Нормальной информации по аллокаторам нет, исследую методом научного тыка. К тому же, подозреваю я не верно понял концепцию аллокаторов. Вначале я сделал что-то в духе:
И тут мне подумалось, а может это и есть аллокторы, понять которые я пытаюсь уже неделю? Но просто надо сделать запись в нужную позицию void* alloc автоматическим и вот что вышло.
0
|
||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 30.04.2025, 14:44 | ||
|
Аллокаторы памяти(хабра) Базовые концепции аллокаторов(хабра) Качество и актуальность не проверял. "Roy Patrice / Рой Патрис - C++ Memory Management / Управление памятью на C++ [2025]" Аллокаторы рассматриваются аж в разделе 14. Writing Generic Containers with Allocator Support. Это я к тому, что до них вы так же должны хорошо понимать механизмы работы с памятью. Разницу между new, placement new, malloc и calloc. И так далее.
0
|
||
|
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251
|
|
| 30.04.2025, 14:54 [ТС] | |
|
эти ссылки я читал, они бесполезны
а книга... короче я учил суахили, а не английский есть несколько видео на ютубе, но там для тех кто уже всё понял
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 30.04.2025, 15:30 | |||
|
ну хотя бы студируйте cppreference. Начиная с <char_traits>Мои полномочия всё.
0
|
|||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||
| 30.04.2025, 23:44 | |||
|
Конкретную (и более сложную) реализацию аллокатора можно также найти в книге Александреску "Современное проектирование на C++".
1
|
|||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 866
|
|
| 01.05.2025, 11:29 | |
|
Использование в плюсах линейного аллокатора для классов и шаблонов это плохая идея. Весь смысл линейного аллокатора в том что он используется тогда когда вам надо для какого либо расчёта дохрена мелких выделений памяти и после окончания расчёта вы просто говорите что всех этих выделений памяти не существовало. Соответственно никаких вызовов деструкторов не будет.
Поэтому шаблонные классы которые в будущем захотят выделять какие то ресурсы не освободят их. Почитайте импортные статьи про аллокаторы и как их использовать. Все Кастомные аллокаторы это очень мощная штука но надо учить алгоритмы и выключить ООП головного мозга.
1
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||
| 01.05.2025, 13:46 | ||||
|
Скорее это совет от того кто в него не умеет.
1
|
||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||||||||||
| 02.05.2025, 04:42 | ||||||||||||
|
Anton1978, для типов с тривиальным уничтожением:
с++20 (concepts)
Просто выдалась минутка. Добавлено через 4 минуты Но я не уловил что это и для чего. Добавлено через 5 часов 51 минуту DrOffset, пожалуйста, прокомментируйте мне этот фрагмент моего кода поста #15.
Но я не понимаю сакрального смысла указания выравнивания для куска памяти.
1
|
||||||||||||
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|||||||||
| 02.05.2025, 12:38 | |||||||||
|
То есть вот этот указатель, который передается в placement new, должен быть выровнен в соответствии с T. В то же время, если T всегда один и тот же, то это выравнивание остальных адресов получится само собой. Но тогда стартовый адрес для участков должен быть выровнен. Тут есть нюанс, что аллокаторы общего назначения сейчас и так отдают уже максимально выровненые адреса для заданной платформы, потому что на их стороне обычно неизвестно какой именно тип будет размещен по этому адресу.
Но это все, конечно, умолчания конкретной платформы. Добавлено через 3 минуты
1
|
|||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 02.05.2025, 16:28 | |
|
0
|
|
|
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
|
|
| 02.05.2025, 22:18 | |
|
0
|
|
|
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251
|
|||||||||||
| 06.05.2025, 10:57 [ТС] | |||||||||||
|
Нашел позавчера видео где ведущий делает аллокатор, в прямом эфире.
Вот его код
0
|
|||||||||||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 866
|
|
| 06.05.2025, 11:10 | |
|
ну так это аллокатор, который просто поверх обычного new но только подсчитывает обший объём выделенной памяти - для статистики.
написано просто как пример - его использование в таком виде бесполезно.
1
|
|
|
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251
|
||||||||||||||||
| 06.05.2025, 13:06 [ТС] | ||||||||||||||||
|
а еще совсем непонятный момент, что передаётся в T* allocate(std::size_t num)
руководство утверждает, что это - Количество элементов, для которых необходимо выделить достаточный объем памяти. Но если написать вот такой аллокатор
Добавлено через 58 минут до меня дошло, это из-за тестирования , я делаю вот такую проверку аллокатора
0
|
||||||||||||||||
| 06.05.2025, 13:06 | |
|
Помогаю со студенческими работами здесь
20
[Linker Fatal Error] Fatal: Could not open ~CBuilder6\Projects\Project1.exe (error code 5)
Debug assertion failure LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|