Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 20:35   #1
Blind Guard
Форумчанин
 
Регистрация: 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 уже будет выделена память? (только ради уменьшения длины кода )

Возможно, объяснял как для новичков в своём деле, но думаю так будет понятнее.

Заранее благодарен.
Blind Guard вне форума Ответить с цитированием
Старый 04.06.2012, 21:06   #2
FreeCat
Пользователь
 
Регистрация: 04.06.2012
Сообщений: 16
По умолчанию

теоретически с++ управляет памятью автоматически по принципу видимости переменных, но есть и явные способы для создания/удаления (new и delete) как-бы вручную. Почитйте о понятии кучи (heap).
Я в этом не спец, сам учусь, но думаю это поможет

И еще, тот способ которым функция принимает строку приведет к крашу. Вы неосторожно пользуетесь указателями.
FreeCat вне форума Ответить с цитированием
Старый 04.06.2012, 21:12   #3
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

спасибо, учту
Blind Guard вне форума Ответить с цитированием
Старый 04.06.2012, 21:21   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Что именно ты подразумеваешь под выделением памяти под строку?
_Bers вне форума Ответить с цитированием
Старый 04.06.2012, 21:37   #5
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

char *str=(char*)calloc(n,sizeof(char));
или через new, неважно
Blind Guard вне форума Ответить с цитированием
Старый 04.06.2012, 21:43   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Blind Guard Посмотреть сообщение
char *str=(char*)calloc(n,sizeof(char));
или через new, неважно
Выделенная на куче память будет актуальна до тех пор, пока она не будет так же явно освобождена, либо пока операционная система не прибьёт весь процесс топором.

Ты можешь в любой точке программы выделить память, а пользоваться ею в любой другой точке программы.

Время жизни данных, записанных в такую память - пока программист явно не освободит эту память. Забудешь освободить память - получишь утечку памяти.
_Bers вне форума Ответить с цитированием
Старый 04.06.2012, 23:01   #7
Blind Guard
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 139
По умолчанию

Хм... более менее понятно, благодарю
Blind Guard вне форума Ответить с цитированием
Старый 05.06.2012, 00:52   #8
asmars
Форумчанин
 
Аватар для asmars
 
Регистрация: 28.05.2011
Сообщений: 309
По умолчанию

есть два способа выделения памяти, malloc & new(те, которые мне известны).
какая разница между ними? читал гугл, что-то не очень заметил разницу.
Спеши медленно.
asmars вне форума Ответить с цитированием
Старый 05.06.2012, 01:16   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

malloc -> C-function.
new -> C++ operator.

еще вопросы?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 05.06.2012, 01:35   #10
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

malloc просто выделяет память, new вызывает конструкторы для выделяемых объектов.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распределение памяти. Динамическое выделение памяти с++ 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