|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
||||||
Освобождение памяти malloc free29.03.2013, 22:02. Показов 6973. Ответов 16
Метки нет (Все метки)
В общем работаю над расширением для php (для тренировки в php и в c++ сразу) Суть дела вот в чем, наткнулся на конвертер php массива в массив c++ , суть вот в чем, функция ест память! Я не умею обращаться с ф-й malloc и free и по этомц ситуация поставила меня в тупик.
0
|
||||||
| 29.03.2013, 22:02 | |
|
Ответы с готовыми решениями:
16
SIGABRT после free malloc Управление памятью с использованием malloc и free |
|
0 / 0 / 0
Регистрация: 29.03.2013
Сообщений: 18
|
||||||
| 29.03.2013, 23:20 | ||||||
0
|
||||||
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
||
| 29.03.2013, 23:28 | ||
|
Systemes, когда функция malloc выделила память, то она вернула указатель на ее начало. Вы не должны его потерять. Когда вы перестаете нуждаться в этой памяти, то ее нужно освободить. Для это в функцию free передаем тот самый указатель, который мы запомнили. Груба говоря на каждый вызов malloc/calloc должен приходится вызов free.
1
|
||
|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
||
| 29.03.2013, 23:49 [ТС] | ||
|
0
|
||
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
| 29.03.2013, 23:57 | |
|
"и вернуть и засунуть во free" - задача никак не решается.
можно конечно освободить память и вернуть указатель на нее, но пользоваться ей нельзя будет. схема простая: тот кто вызывает функцию php_array_to_c_array получает от нее указатель на память и он отвечает за вызов какой-то функции, которая приведет у удалению выделенной памяти. если он это сделать не в состоянии - то задачка не решается.
1
|
|
|
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
|
|
| 30.03.2013, 00:02 | |
|
Systemes, а. Понял. Вариантов масса.
1. Создать класс. И освобождать память в деструкторе. 2. Возложить обязанность на освобождение памяти на подпрограмму, которая вызывает вашу функцию php_array_to_c_array.
0
|
|
|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
||||||
| 30.03.2013, 00:11 [ТС] | ||||||
|
Да есть указатель)) Я не подумал что через указатель можно освободить память, по этому не копал в эту сторону(( Но даже в этом случае что-то постепенно съедает память
0
|
||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 30.03.2013, 00:11 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
|||||||||||
| 30.03.2013, 14:34 [ТС] | |||||||||||
|
Ну в общем я понял куда копать)
Добавлено через 14 часов 13 минут мне так и не удалось решить проблему с утечкой памяти
0
|
|||||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 30.03.2013, 17:49 | |
|
Утечка памяти - это когда указатели на выделенную память теряются. У вас может этого и нет. Может просто большой расход памяти, но это другое. Если я правильно понимаю, у вас связанный список, и на каждый узел выделяется память, а освобождение памяти происхоит, когда список удаляется. Это не утечка, код такой. Как с этим бороться и можно ли, нужно подумать...
0
|
|
|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
|
| 30.03.2013, 20:24 [ТС] | |
|
Да вы правильно поняли))И к сожалению пока не могу найти ответа как справиться с данной проблемой...
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 30.03.2013, 22:18 | |
|
Цель кода в чём?
Добавлено через 1 минуту Если просто создать массив, то массив будет занимать память, и с этим ничего не сделать. Памяти не хватает при работе программы? Добавлено через 1 минуту Памяти расходуется больше, чем размер массива?
0
|
|
|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
|
| 31.03.2013, 11:33 [ТС] | |
|
Память расходуется в зависимости от размера поступившего массива. Причем чем больше массив, тем меньше расходуется памяти. Но есть порог, при котором память снова начинает расходоваться.
Память расходуется постепенно. При 65 вызовах ф-ии в сек-у где-то 0.22 мб в секунду, при учете что в массиве передается один парамет равный 0. По идее к add_efree_list_on_flush будет обращается сразу несколько разных ф-й, и потом идет очищение памяти: add_efree_list_on_flush add_efree_list_on_flush add_efree_list_on_flush free_efree_list_on_flush структура будет такая... Ссылка на массив поступая в add_efree_list_on_flush отправляется еще и в основную ф-ю. free_efree_list_on_flush вызывается когда с массивами произойдут все операции
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 31.03.2013, 14:12 | |
|
Интересно, а какое это отношение тема имеет к С++? Чистый С же. Применимо к ++ следовало бы использовать какой-нибудь из smart-pointer'ов.
0
|
|
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||
| 31.03.2013, 20:52 | |||
|
???
Чтобы попытаться разобраться с расходом памяти, того кода, который вы показали, недостаточно.
0
|
|||
|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
||||||
| 31.03.2013, 21:46 [ТС] | ||||||
0
|
||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 31.03.2013, 22:14 | |
|
И как это проверять?
0
|
|
| 31.03.2013, 22:14 | |
|
Помогаю со студенческими работами здесь
17
Работа с памятью через malloc,realloc и free
Резервирование памяти/освобождение памяти для трехмерного массива
Выделение памяти malloc Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|