Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
 Аватар для GBIT
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223

Массивы и строки char + освобождение памяти

22.12.2011, 13:04. Показов 6540. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не понимаю когда нужно освобождать память когда нет? Когда пользоваться delete[]

если я объявляю
char *Name=new char[32];
ему обязательно перед завершением работы программы дописывать
delete[]Name;
?
или если я объявляю
char Name[32];
тут нужно delete?
а еще не совсем понимаю когда у меня создается строка а когда массив одномерный?
подозрение что в первом случае был массив а в другом строка. или это везде был массив.. оО

еще интересно когда идет переполнение стека?
что делать чтобы его не было?

Добавлено через 6 минут
и еще, кстати, почему бы до кучи еще и переменные не удалять таким же образом?
int a;
delete []a;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2011, 13:04
Ответы с готовыми решениями:

Освобождение памяти у динамического массива char
Добрый день. Имеем код: class _ArrayChar { typedef int Ivalue; typedef char* Pchar; typedef const char Cchar;

Освобождение памяти для динамического масива типа char
Здравствуйте, помогите пожалуйста разобраться с одним моментом. При освобождении памяти двумерного динамического массива типа char, в конце...

Освобождение памяти (удаление массива char) и raised exception class EAccessViolation
Подскажите плиз, есть программа, вот кусок AnsiString inputText; int inputTextLength; inputText= Form1->Edit1->Text; ...

7
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.12.2011, 13:49
Цитата Сообщение от GBIT Посмотреть сообщение
если я объявляю
char *Name=new char[32];
ему обязательно перед завершением работы программы дописывать
delete[]Name;
Обязательно!

Цитата Сообщение от GBIT Посмотреть сообщение
или если я объявляю
char Name[32];
тут нужно delete?
Ни в коем случае!

Цитата Сообщение от GBIT Посмотреть сообщение
а еще не совсем понимаю когда у меня создается строка а когда массив одномерный?
подозрение что в первом случае был массив а в другом строка. или это везде был массив..
Строка = одномерный массив символов

Цитата Сообщение от GBIT Посмотреть сообщение
еще интересно когда идет переполнение стека?
что делать чтобы его не было?
Не объявлять слишком больших автоматических переменных.
Осторожно пользоваться рекурсией.
Выть на луну и рвать волосы на голове.

Цитата Сообщение от GBIT Посмотреть сообщение
и еще, кстати, почему бы до кучи еще и переменные не удалять таким же образом
Попробуй. Потом всем расскажешь
2
 Аватар для GBIT
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
22.12.2011, 13:57  [ТС]
т.е. когда я просто объявляю
int a;
char Name[32];
на всех их идет выделение памяти из стека? а если переменная в стеке то ее удалять потом не нужно?
0
85 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
22.12.2011, 14:01
GBIT, удалять нужно только указатели, которых ты динамический выделяешь.
То-есть, на каждый new нужен delete.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
22.12.2011, 14:02
GBIT, именно.

Добавлено через 27 секунд
res, и, в дополнение, на каждый new[] - delete[].
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.12.2011, 14:06
Цитата Сообщение от GBIT Посмотреть сообщение
т.е. когда я просто объявляю
int a;
char Name[32];
на всех их идет выделение памяти из стека? а если переменная в стеке то ее удалять потом не нужно?
Стек для того и придуман. При входе в функцию (подпрограмму) выделяется область на все ее автоматические переменные (представь себе стопку книг, сверху кладется новая книга). При выходе эта книга снимается и сжигается.
1
22.12.2011, 14:08

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
При выходе эта книга снимается и сжигается
Жестоко :cry:

1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.12.2011, 14:10
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:


Жестоко :cry:

Не по теме:

Это я к тому, чтобы ТС не попытался эту книгу после выхода прочитать:)

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2011, 14:10
Помогаю со студенческими работами здесь

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

Указатели на строки. Выделение и освобождение памяти
Всем добрый день. Есть два указателя на char. Для первого выделяется память а у второго просто делаем копию с первого. Для 1-го...

Резервирование памяти/освобождение памяти для трехмерного массива
Необходимо создать трехмерный массив (A), в котором элементы вдоль направления Z выли бы выровнены по 16 байт. Есть две проблемы: ...

Освобождение памяти
Собственно есть простенький класс class Human { public: Human ( ); void ptintHuman(); private: static long...

Освобождение памяти
Маленький вопросик, как правильно освобождать память выделенную под vector<...>, деструктором ~vector() или методом clear() ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru