|
0 / 0 / 0
Регистрация: 17.10.2025
Сообщений: 8
|
|
Выделение памяти malloc19.10.2025, 14:15. Показов 1301. Ответов 14
Метки нет (Все метки)
Доброе время суток.
Как можно узнать выделялась ли память с помощью malloc. Дело в том что данные в массив могут заполняться как константами так и через ввод с клавиатуры. И в конце программы надо освобождать память (free()).
0
|
|
| 19.10.2025, 14:15 | |
|
Ответы с готовыми решениями:
14
В чем разница между malloc() и (char *)malloc() Динамическое выделение памяти malloc() Выделение памяти с использованием malloc |
|
2319 / 1561 / 721
Регистрация: 17.03.2022
Сообщений: 5,031
|
||
| 19.10.2025, 14:21 | ||
|
P.S. Понял, что вопрос можно истолковать двумя способами, и надо уточнить, что имеется в виду. Речь идет об успешности выделения памяти с помощью malloc() или о том, динамически она выделялась или статически? В первом случае ответ написан выше, во втором попытка применить free() к "нединамическому" указателю приведет к неопределенному поведению, так что информацию о (не)выделении памяти надо как-то сохранить.
1
|
||
|
0 / 0 / 0
Регистрация: 17.10.2025
Сообщений: 8
|
|
| 19.10.2025, 14:24 [ТС] | |
|
Проверял. В обоих ситуациях возвращает true.
динамически она выделялась или статически?
0
|
|
|
2319 / 1561 / 721
Регистрация: 17.03.2022
Сообщений: 5,031
|
||
| 19.10.2025, 14:28 | ||
|
Или, как вариант - как проверяли? Приведите пример соответствующего кода.
0
|
||
|
Windows must die
|
|
| 19.10.2025, 14:31 | |
|
На стадии отладки можно использовать макросы mcheck/mprobe.
В общем случае невозможно в раниайме определить, из какого сегмента адрес. Добавлено через 2 минуты А, ещё есть грязный трюк с realloc. Но будет сегфолт, если ему переменную из data-секции подсунуть. Как вариант - хранить границы bss и data в переменных, заведя их в ld-скрипте.
0
|
|
|
0 / 0 / 0
Регистрация: 17.10.2025
Сообщений: 8
|
|
| 19.10.2025, 14:34 [ТС] | |
|
Понял. Спасибо.
0
|
|
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|
| 19.10.2025, 14:49 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 17.10.2025
Сообщений: 8
|
|||||||||||
| 19.10.2025, 14:52 [ТС] | |||||||||||
|
Надо очистить память
0
|
|||||||||||
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|||||||
| 19.10.2025, 15:04 | |||||||
|
MalyhevSergey, чо такое n? Массив структур с полями типа
char*?Добавлено через 8 минут
0
|
|||||||
|
0 / 0 / 0
Регистрация: 17.10.2025
Сообщений: 8
|
|
| 19.10.2025, 15:58 [ТС] | |
|
чо такое n? Массив структур с полями типа char*?
Да
0
|
|
|
Злостный нарушитель
10359 / 5774 / 1274
Регистрация: 12.03.2015
Сообщений: 26,686
|
|
| 19.10.2025, 16:12 | |
Сообщение было отмечено Annemesski как решение
Решение
0
|
|
|
4867 / 1434 / 116
Регистрация: 21.04.2013
Сообщений: 8,679
|
|||||||||||
| 19.10.2025, 17:13 | |||||||||||
|
В языке C нельзя напрямую определить, была ли память выделена с помощью malloc() (или других функций динамического выделения памяти, таких как calloc, realloc) только по указателю. То есть, если у вас есть указатель, вы не можете программно узнать, указывает ли он на динамически выделенную память или на статическую/автоматическую (например, на массив в стеке или глобальный массив).
malloc() возвращает просто адрес в куче, а указатель на статический/локальный массив - тоже просто адрес. С точки зрения программы это просто void* (или int*, char* и т.д.). Нет никакой "метки" в самом указателе, говорящей о происхождении памяти. Самый надежный и распространенный способ - вести флаг или использовать разные переменные, чтобы отслеживать, была ли память выделена динамически.
0
|
|||||||||||
|
Вездепух
13177 / 6813 / 1821
Регистрация: 18.10.2014
Сообщений: 17,237
|
||
| 21.10.2025, 08:58 | ||
|
Если вы сами выделяли память динамически, значит она выделялась память динамически. Просто запоминайте, как вы выделяли память - вот и весь ответ на ваш вопрос.
0
|
||
|
0 / 0 / 0
Регистрация: 17.10.2025
Сообщений: 8
|
|
| 21.10.2025, 09:12 [ТС] | |
|
Всем спасибо. Разобрался.
0
|
|
|
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
|
|
| 21.10.2025, 10:19 | |
|
Сделать обертки для malloc() и free() уже предлагали?)
0
|
|
| 21.10.2025, 10:19 | |
|
Помогаю со студенческими работами здесь
15
Выделение памяти malloc
Выделение памяти через malloc и считывание данных Выделение памяти malloc приводит к неправильным расчетам Malloc (выделение памяти двумерному массиву) - проверить код Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|