|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
||||||||||||||||
Memory Corupting03.11.2022, 22:56. Показов 674. Ответов 22
Метки нет (Все метки)
Смотрю различные примеры аллокаторов. Взял примеры вот отсюда https://github.com/mtrebi/memory-allocators
Получаю ошибку на освобождении памяти. HEAP CORRUPTED DETECTED: after normal block. Запускаю из под VS 2022. Есть мысли что возможно аллоцируется больше чем блок на каждую структуру. Но выделение большего блока памяти не решает проблему а вызывает другую. Код приведен ниже. Либо я устал либо в упор не вижу проблему. Нужна помощь. header
0
|
||||||||||||||||
| 03.11.2022, 22:56 | |
|
Ответы с готовыми решениями:
22
Out of memory Memory Manager Memory Bomb |
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 03.11.2022, 23:10 | ||
|
Короче, рановато пока для аллокаторов, сперва основы языка подтянуть нужно.
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 03.11.2022, 23:14 [ТС] | |
|
Да это я его уже руками вызывал. Он когда из поля видимости цикла выходит и объект уничтожается в деструктор заходит.
И на free естественно вываливается. Та же проблема у меня была и с аллокатором от Александреску. Добавлено через 2 минуты Т.е. если я использовал free в Chunk от SmallObjectAllocator при релизе у меня память тоже кораптилась, но на delete[] проблем не было.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 03.11.2022, 23:14 | |
|
0
|
|
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
||||||
| 03.11.2022, 23:17 [ТС] | ||||||
|
Это уже тоже пытался посмотреть может он список не чистит. Изначально этого не было. Тут уже после заливки нельзя отредактировать было
Добавлено через 1 минуту
0
|
||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 03.11.2022, 23:19 | |
|
0
|
|
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 03.11.2022, 23:19 [ТС] | |
|
Это вот я тоже для того чтобы посмотреть какое смещение от начального адреса было. Посмотрел sizeof самой структуры 16, но вот для указателя на ноду 8. Ну и newNode тоже 8 весит
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 03.11.2022, 23:20 | |
|
0
|
|
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|||||||||||||||||
| 03.11.2022, 23:27 [ТС] | |||||||||||||||||
Добавлено через 2 минуты вызов
Добавлено через 1 минуту Тут как бы код прям вроде один в один как на гите, да и создаю объект правильно. Я вот не понимаю что free как то не работает, может есть какие то подводные камни?
0
|
|||||||||||||||||
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 03.11.2022, 23:28 | ||
|
А еще член head у тебя не инициализирован. И остального гомнокода ты не предоставил.
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 03.11.2022, 23:34 [ТС] | |
|
Хммм. Интересно. Но вот сколько я вижу head ставится в push. А остального то перфектного кода и нет.
Добавлено через 45 секунд Я же его специально и сократил до того чтобы понять в чем проблема.
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 03.11.2022, 23:36 | ||
Сообщение было отмечено BaredJJ как решение
Решение
1
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|
| 03.11.2022, 23:46 [ТС] | |
|
Как это понять. Я вот полагаюсь на sizeof и он мне выводит что размер Node* равен 8. Мы же по сути и не создаем сами ноды а по сути интерпретируем память как Node*
Добавлено через 5 минут Похоже понял. Я тогда не понимаю зачем выкладывать не рабочий аллокатор в доступ
0
|
|
|
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
||
| 03.11.2022, 23:46 | ||
sizeof(Node*) != sizeof(Node)! Член next, который меняется в push, расположен по адресу address + 8.
0
|
||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||
| 03.11.2022, 23:47 | ||
|
На 64 битах он никак не может быть 8, потому что 8 занимает только указатель, а член data у вас равен 1, что в сумме приведет к выравниванию до 16. Т.е. на 64 битах sizeof Node равен 16.
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
|||
| 03.11.2022, 23:53 [ТС] | |||
|
Понятно. Он рабочий но только на объектах больше 16 байт. Нужно чтобы размер одного чанка был больше или равен размеру ноды.
Добавлено через 3 минуты
А есть какие ни будь актуальные статьи по аллокаторам для небольших объектов? А то вот от Александреску работает хуже чем дефолтный если замеры просто на пару проходов полного заполнения и удаления вектора делать. Добавлено через 41 секунду И спасибо за помощь. Теперь хоть спать спокойнее буду.
0
|
|||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 04.11.2022, 00:00 | |||
|
Потому что при большем размере начнет затираться указатель next.Чтобы это починить нужно поменять местами data и next и соответственно исправить выдачу адреса пользователю аллокатора.Добавлено через 3 минуты Если у вас нет задачи, уже реально сделанного и работающего кода, в котором после профилирования выяснилась потребность в смене аллокатора, и на котором можно проверить работу вашего аллокатора, то нечего даже садиться его писать. Добавлено через 1 минуту Аллокатор пишется под задачу. Замеры в вакууме, без задачи, будут врать. Если есть задача и есть удачно написанный под нее аллокатор, то вы увидите эффект на тестах. Все остальные варианты останутся лишь злостными инсинуациями.
1
|
|||
| 04.11.2022, 00:00 | ||
|
Не по теме:
Более того, в современных рантаймах с++ стандартные new/delete настолько хорошо оптимизированны, что не уступают в однопоточных приложениях по производительности даже std::pmr::monotonic_buffer_resource (это что-то вроде стекового аллокатора).
0
|
||
|
19 / 18 / 7
Регистрация: 16.05.2017
Сообщений: 447
|
||||
| 04.11.2022, 09:42 [ТС] | ||||
0
|
||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||
| 04.11.2022, 11:43 | ||||
|
0
|
||||
| 04.11.2022, 11:43 | |
|
Помогаю со студенческими работами здесь
20
vector memory memory can't be 'written' memory leaks | Деструктор
Custom memory manager Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|