|
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
|
|||||||||||
Вопрос по работе с "CALLOC()"30.08.2008, 19:05. Показов 4169. Ответов 11
Метки нет (Все метки)
Понадобилось сделать несколько функций для работы с массивами разных размеров. Функции выглядят римерно так:
??? Можно ли обойти эту проблему? Мне хотелось бы выкинуть из моих других функций код выделения памяти. И вообще избавить программу от десятка копий кода. ПС: Где-то читал, что код вида "for(int i=0..." нехорошо пользовать. Почему желательно объявлять переменную вне оператора цикла?
0
|
|||||||||||
| 30.08.2008, 19:05 | |
|
Ответы с готовыми решениями:
11
malloc vs. calloc calloc, free. calloc vs malloc |
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 30.08.2008, 21:07 | |
|
Лучше возвращать указатель из функции.
По поводу инициализации - это для безопасности. На области видимости переменной завязано.
1
|
|
|
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
|
|
| 30.08.2008, 22:57 [ТС] | |
|
Попробую с возвратом указателя сделать. Но я что-то сомневаюсь... Сам-то пробовал?
![]() Я так понял, что нет доступа к выделенной памяти.. а в ком дело - указатель получается невалидный или область видимости памяти нарушена? Если второе, то возврат указателя, думаеццо, не поможет. Насчет переменной в цикле.. Поясни поконкретнее, пожалуйста.. А то, как я понял, тут суть какая-то очень тонкая.. Вроде в псевдокоде сгенерированный код цикла получается неоптимальный, что-ли, и небезопасный. Но в чем? Переменная эта мне вне цикла не нужна.. Разьве что при дебаге я не могу увидеть последнее значение индекса вне вложенного оператора - ну так это все пустяк. А вот если на какойто операционке может этот код вызвать криминал - тада да.. После Проверки.. Девствительно работает! Как говорят буржуи: "Фенкз ту ю твайс, мэн!!!" Не придется серьезно код править.. Спасиба!Добавлено через 57 минут 30 секунд Рещил написать отдельно.. У меня там есть класс.. В его конструкторе я создаю указанным выше способом массивы, а в деструкторе их делетю - в результате имею ошибку дуступа к памяти при закрытии приложения. Если комментирую делеты, то все пучком. Но при этом может быть утечка памяти. Так ли это? Если появляется такая ошибка, то, наверное, память сама очищается (автоматически?).. Но ведь говорят, что аллоки нужно вычищать самому. Я малясь запутался
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||||||
| 30.08.2008, 23:17 | ||||||
|
Блин, конечно пробовал
![]() Будет меняться, если будешь менять значение указателя, а не сам указатель. Сохраняется значение указателя, но не он сам. Ты можешь поменять *ukazatel и оно сохранится, так как, хранится адрес в ukazatel. А сам uakazatel останется таким, какой был до вызова.
Добавлено через 1 минуту 27 секунд А аллоки не "делетят", их освобождают через free.
0
|
||||||
|
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
|
|
| 30.08.2008, 23:36 [ТС] | |
|
Дружище, уж бональности объяснять не надо мне.
Не знаю чем я вызвал подозревание в моей тупости и несведущьности Уж коль я с указателями вожусь, то понимать должон, что они такое есть. Просто опыта маловато, вот и не знаю некоторой специфики. Вот если б спросил типа: "А если я освобожу память через один указатель, а на нее еще один ссылается? Будет ли она освобождена? Тада да.." Ладно... проехали..Объясни мне, дураку, чем delete и free отличаются.. я имею в виду не синтаксис, канешна
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 30.08.2008, 23:48 | |
|
Прастите, под всех одновременно сложно подсториться. Если б я увидел тупость, я бы не отвечал в этой теме. У меня есть время и отвечаю развернуто
![]() free освобождает блок памяти, который был до этого выделен с помощью calloc, malloc, realloc. delete - служит для освобождения памяти выделенной через new. К слову, тут обсуждалась разница между malloc & new. Вот тут тоже самое. delete вызывает operator delete. Который, конечно, даже переписать можно. А free просто освободит память.
1
|
|
|
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
|
|
| 31.08.2008, 00:23 [ТС] | |
|
Все пучком, друх!
Это я к тому сказал, что можно незаморачиваться на очевидных вещах. Тебе все равно без этого нельзя было обойтись..Про free понял.. Я как раз на delete и зациклился из-за BDS2006 c VCL. Надо будет отвыкать от некоторых удобств.. Спасибо...
0
|
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
| 31.08.2008, 00:33 | |
|
0
|
|
|
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
|
|
| 31.08.2008, 00:42 [ТС] | |
|
С free та же петрушка.. Может не надо в деструкторе это ставить?
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 31.08.2008, 00:42 | |
|
CheshireCat, все что объявлено вне внутреннего блока цикла считается внешним относительно его. Следование евангелию может привести к различным последствиям. В любом случае, на это полагаться нельзя. Хотя, компилятор тоже говорит иное.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||
| 31.08.2008, 03:22 | ||
|
Добавлено через 2 часа 36 минут 43 секунды Вот немного о for'ах: https://www.cyberforum.ru/cpp/... #post51823
0
|
||
|
132 / 99 / 11
Регистрация: 21.11.2007
Сообщений: 544
|
|||||||||||
| 04.09.2008, 16:17 [ТС] | |||||||||||
|
Вот код конструктора класса и его деструктора...
Только щас заметил.. У меня эта функция в двух местах (модулях) образовалась.. В одном есть возвращение указателя, а в другом модуле эта функция без возврата. Может в этом касяк? Посмотрю щас. Добавлено через 2 минуты 4 секунды Точно так... Вот где собака порылась. КопиПэйст Маст ДАЙ! ![]() ПС: В нескольких модулях у меня для удаления указателей все же использовался delete.
0
|
|||||||||||
| 04.09.2008, 16:17 | |
|
Помогаю со студенческими работами здесь
12
calloc Как правильно создать двумерный массив указателей с использованием calloc? и ввод данных в него Работа с calloc и free в C++ Как string создает строку?(calloc, malloc) Использование calloc/realloc/free Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
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 законам Кирхгофа и. . .
|