|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
||||||
Ошибка Fatal glibc error: malloc.c:259904.01.2025, 20:16. Показов 10516. Ответов 34
При компиляции ошибок нет.
При запуске в середине программы ошибка.
Открываю файл config (текстовый), в нем настройки программы. С новой строки (переменная = значение). Есть в конфиге следующая строка: prefix_mobile = m При наличии строки ошибок нет, но переменная в которую я копирую значение оказывается пустая. Когда строку из конфига убираю - происходит ошибка (выше). 1. Почему переменная char * prefix_mobile пустая, когда я копирую туда значение. Она не пустая сразу. Я делал вывод в консоль через printf и она выводится правильно. Ниже через строк 300-400 кода я вывожу эту переменную и она пустая. 2. Почему когда я убираю эту строку из конфига происходит ошибка (выше). Много информации нашел в интернете, в т.ч. про valgrind утилиту для тестирования. Могу переписать код программы по новой и посмотреть что выйдет, но уйдет много времени. 3. Читал статью в интернете. Про выделение памяти malloc. Есть информация что выделенная память растет в геометрической прогресиии, даже если передаю в malloc 9 байтов, то она округляется до 8 * 2 = 16. Если передаю malloc 129 (128 + 1), то память округляется до 256 (128 * 2). Это миф или есть основа для таких выводов? Может есть другое объяснение этой информации? Есть альтернативные библиотеки для управление памятью?
0
|
||||||
| 04.01.2025, 20:16 | |
|
Ответы с готовыми решениями:
34
Ошибка при компиляции [Linker Fatal Error] Fatal: Expected a file name: Ошибка [Linker Fatal Error] Fatal: Unable to Open file 'VCL.LI' Ошибка [Linker Fatal Error] Fatal: Expected a file name: |
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
||
| 04.01.2025, 20:27 | ||
|
Кликните здесь для просмотра всего текста
1
|
||
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
||||||
| 04.01.2025, 20:32 [ТС] | ||||||
|
После удаления строки из конфига ошибка происходит вообще при парсинге другого значения из конфига.
Первый "Hello" выводится а второй - нет когда возвращаю значение prefix_mobile в конфиг, ошибка исчезает **магия
0
|
||||||
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|
| 04.01.2025, 20:40 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
||||||
| 04.01.2025, 20:50 [ТС] | ||||||
|
Для этого realloc сделал вызов malloc ранее и ошибка перешла на вызов malloc, который находится ниже (тот код который отправил ранее) та же ошибка.
sizeof(char *) - хранит ровно столько байт , сколько надо для адресации массивов на текущей системе. (вычитал из справочников). зависит от разрядности системы. на 32 битных это 4 а на 64 битных - 8. Затем useragent_masks_desktop[ key ] = malloc(size) это выделение памяти для значения в массиве с индексом key
0
|
||||||
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|
| 04.01.2025, 20:55 | |
|
realloc-то нахрена?
Зачем вообще вся эта фигня с перераспределениями памяти для загрузки сраного конфига? Поставь там брейкпойнт и посмотри значения полей перед местом крэша по ассёрту, ёмаё. Отладчик именно для этого придумали. Мне отсюда не видно, что у тебя в конпуктере происходит.
1
|
|
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
||||||
| 04.01.2025, 20:59 [ТС] | ||||||
|
Verevkin, значение вот
useragent_masks_desktop = xxx.|0.|2.12.|2.4.5.12.|2.12.6.|7.2.12.| 2.12.7.|2.12.8.|13.12. это строка из конфига значение xxx. пытается выделить 5 байт памяти
strlen(main_data.char2) - 4 байта + 1 = 5 байтов. значение xxx. из переменной main_data.char2 тут и происходит ошибка. не выделает 5 байт памяти. сама строка с malloc и дает сбой ошибку (Fatal glibc error: malloc.c:2599)
0
|
||||||
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|||
| 04.01.2025, 21:03 | |||
|
Осталось понять, что за загадочная структура g и зачем она. char ** - это не 2d array, а динамический массив указателей. Добавлено через 3 минуты g.useragent_masks_desktop[ g.useragent_masks_desktop_count ]? Зачем ваще тут массив? Да, теоретически так можно, но геморроя не оберёсся. Сделай список и не надо будет юзать realloc().
0
|
|||
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
|
| 04.01.2025, 21:05 [ТС] | |
|
Verevkin, прикол в том, что когда я возвращаю prefix_mobile в конфиг, то ошибка исчезает. с чем это может быть связано
Добавлено через 1 минуту Verevkin, программа выдает ошибку сразу после выделения памяти. я не выхожу за пределы памяти (была бы другая ошибка).
0
|
|
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|||
| 04.01.2025, 21:08 | |||
|
Советую выкинуть всю эту срань фтопку и написать хороший код с нуля (через список).
0
|
|||
|
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,752
|
|
| 04.01.2025, 22:24 | |
|
0
|
|
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 866
|
|||||||
| 04.01.2025, 22:51 | |||||||
|
вообще ошибка очень похожа на то то где-то повредилась метаинформация malloc о расположении выделенных и пустых блоков. Тоесть где-то в программе есть выход за пределы массива.
ТС - если у вас есть своя библиотека для проверки целостности блоков памяти то самое время ей восползоваться. или valgrind. Ну или написать свою - благо она не сложная но очень полезная. Кстати из под отладчика ошибка может не проявляться.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
||||||
| 06.01.2025, 23:01 [ТС] | ||||||
|
списки вещь хорошая. а как предложите реализовать Базу данных на списках?
есть другие способы выделять память? без malloc realloc free. Эта библиотека ведь также основывается на других
0
|
||||||
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|||
| 06.01.2025, 23:19 | |||
|
Тыж сам сказал, что у тебя проблема с текстовым конфигом.
1
|
|||
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
|
| 06.01.2025, 23:37 [ТС] | |
|
На самом деле все можно сделать списками. Список имеет next, prew, parent и другие указатели на списки такого же типа.
Но ошибка может настигнуть и со списками. Тут надо использовать другой аллокатор памяти. Читал статью, что более 1кк записей в массиве также дает сбой malloc.c:2599. Тут надо брать исходный код malloc, realloc, free чтобы понять суть проблемы. для списков также понадобится malloc
0
|
|
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|||||||||||||
| 06.01.2025, 23:50 | |||||||||||||
|
Кликните здесь для просмотра всего текста
Добавлено через 4 минуты Эх, были времена, когда меня заставляли писать всякую срань под DOS. Да, за это платили неплохие бабки, но это была деградация мозгов. Я набросал кусок говнокода, который даже работал, могу подарить.
2
|
|||||||||||||
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 866
|
||
| 07.01.2025, 00:00 | ||
|
напишите маленькую библиотечку для контроля целостности выделяемой памяти - делов то на 10-15 кб кода на С и проверьте. Я такой регулярно пользуюсь и довольно часто она меня выручает - бывает что заработавшись глупую ошибку просто незамечаю. А с такой библиотекой сразу и утечки видно и повреждения... Так же один из вариантов - сделайте разбор конфига без использования выделения памяти. при этом весь файл читается в один блок памяти и в процессе разбора более память не выделяется.
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
|
| 07.01.2025, 04:01 [ТС] | |
|
Aledveu, Если функция не смогла выделить буфер памяти, она возвращает NULL.
Я проверяю это. дело в том что прерывание программы происходит где то в самой функции malloc. Видели исходный код malloc , realloc, free на github?
0
|
|
|
267 / 199 / 30
Регистрация: 26.11.2022
Сообщений: 866
|
||
| 07.01.2025, 17:53 | ||
|
я вом говорил совершенно про другую систему - сделать обёртку над malloc которая при любых обращених и по вашему требованию в любом месте программы может проверить целостность подписей веред выделенным блоком и после - и так для всех блоков памяти которые ваша программа выделила с помощью malloc и аналогичных
1
|
||
|
0 / 0 / 0
Регистрация: 24.02.2021
Сообщений: 18
|
|
| 07.01.2025, 23:29 [ТС] | |
|
Aledveu, это не поможет. malloc просто критически уходит из программы.
Придумал следующий ход: При запуске программы агрументом передавать сколько выделить памяти. Минимум памяти заложен в программе константой. Например передает 100 а минимум 200 мб, то программа проверит есть ли 200 и запустится (или выйдет). Будет главный указатель и колл-во байт выделенной памяти. А затем пишу функцию и списки для управления этой памяти. выделение для чисел и строк. Просто буду устанавливать смещение, размер, указатель. все тоже самое, но в отличие от malloc я буду использовать #define func_name (args) {} , так код будет работать гораздо быстрее и я сам смогу обрабатывать ошибки. а точнее их избежать вовсе. тему закрывать пока не буду. может найдется конкретный ответ, как исправить эту ошибку. попрошу переименовать тему, потому-что сюда заходят, но про саму ошибку сам мало кто знает или вовсе не сталкивался с ней. Добавлено через 2 часа 6 минут Спасибо за ответ и ваш код, но я спрашивал про саму ошибку в любом контексте. А конфиг конечно я могу сделать. Я закомментировал код, где появлялась ошибка, и ошибка перешла в другой участок программы( Вообще в учебниках, которые я читал - рекомендуется сразу выделать память для программы а потом ее запускать. с запасом. так и сделаю.
0
|
|
| 07.01.2025, 23:29 | |
|
Помогаю со студенческими работами здесь
20
Ошибка при компилировании проекта. [Linker Fatal Error] Fatal: Unable to open file '*.OBJ' [Linker Fatal Error] Fatal: Could not open ~CBuilder6\Projects\Project1.exe (error code 5) Error C2760: синтаксическая ошибка / Fatal error C1004: непредвиденное обнаружение конца файла
ошибка fatal error Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|