|
0 / 0 / 0
Регистрация: 05.07.2012
Сообщений: 11
|
||||||
Освобождение памяти malloc free29.03.2013, 22:02. Показов 6925. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|