![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 14.03.2012
Сообщений: 139
|
![]()
Здраствуйте.
Возникло несколько теоретических вопросов насчёт выделения памяти. Возьму для примера следующее FILE *f; char *str; func(str); // какая-то функция, принимающая str Вопросы такие: 1) Допустим в файле f используется строка str (она записывается/считывается в/c файл/файла к примеру) Так вот, нужно ли выделять память под эту строку каждый раз после очередного открытия файла или достаточно одного выделения памяти? 2) Допустим строка str задействована и в функции и вне её в main'е. Необходимо ли выделять память в функции? (то есть будет ли память, выделенная под строку перед функцией распространяться на эту же строку, но уже в функции)? 3) Скажется ли как-нибудь выделение памяти под один и тот же элемент несколько раз? 4) Допустим есть строка str и функция func(). Чтобы избежать постоянного выделения памяти можно ли сделать функцию выделения памяти, то есть при входе в func() str без памяти, а после выхода под str уже будет выделена память? (только ради уменьшения длины кода ![]() Возможно, объяснял как для новичков в своём деле, но думаю так будет понятнее. Заранее благодарен. |
![]() |
![]() |
![]() |
#2 |
Пользователь
Регистрация: 04.06.2012
Сообщений: 16
|
![]()
теоретически с++ управляет памятью автоматически по принципу видимости переменных, но есть и явные способы для создания/удаления (new и delete) как-бы вручную. Почитйте о понятии кучи (heap).
Я в этом не спец, сам учусь, но думаю это поможет И еще, тот способ которым функция принимает строку приведет к крашу. Вы неосторожно пользуетесь указателями. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 14.03.2012
Сообщений: 139
|
![]()
спасибо, учту
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Что именно ты подразумеваешь под выделением памяти под строку?
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 14.03.2012
Сообщений: 139
|
![]()
char *str=(char*)calloc(n,sizeof(char));
или через new, неважно |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Выделенная на куче память будет актуальна до тех пор, пока она не будет так же явно освобождена, либо пока операционная система не прибьёт весь процесс топором.
Ты можешь в любой точке программы выделить память, а пользоваться ею в любой другой точке программы. Время жизни данных, записанных в такую память - пока программист явно не освободит эту память. Забудешь освободить память - получишь утечку памяти. |
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 14.03.2012
Сообщений: 139
|
![]()
Хм... более менее понятно, благодарю
|
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 28.05.2011
Сообщений: 309
|
![]()
есть два способа выделения памяти, malloc & new(те, которые мне известны).
какая разница между ними? читал гугл, что-то не очень заметил разницу.
Спеши медленно.
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
malloc -> C-function.
new -> C++ operator. еще вопросы? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#10 |
С++
Форумчанин
Регистрация: 22.09.2008
Сообщений: 791
|
![]()
malloc просто выделяет память, new вызывает конструкторы для выделяемых объектов.
Форматируйте код, будьте людьми.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Распределение памяти. Динамическое выделение памяти с++ | Tolian92 | Помощь студентам | 8 | 14.05.2012 21:44 |
Выделение памяти (new) | ImmortalAlexSan | Общие вопросы C/C++ | 20 | 05.06.2011 23:39 |
Выделение памяти в С++ | Dj-IIyIIc | Общие вопросы C/C++ | 4 | 18.10.2010 14:39 |
выделение памяти | Артем1256 | Общие вопросы C/C++ | 1 | 13.11.2009 16:38 |
Выделение памяти | mutabor | Общие вопросы Delphi | 8 | 26.08.2009 18:16 |