Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
#1

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

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

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

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

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

Добавлено через 6 минут
и еще, кстати, почему бы до кучи еще и переменные не удалять таким же образом?
int a;
delete []a;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2011, 13:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массивы и строки char + освобождение памяти (C++):

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
22.12.2011, 13:49 #2
Цитата Сообщение от GBIT Посмотреть сообщение
если я объявляю
char *Name=new char[32];
ему обязательно перед завершением работы программы дописывать
delete[]Name;
Обязательно!

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

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

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

Цитата Сообщение от GBIT Посмотреть сообщение
и еще, кстати, почему бы до кучи еще и переменные не удалять таким же образом
Попробуй. Потом всем расскажешь
2
GBIT
11 / 11 / 1
Регистрация: 05.10.2011
Сообщений: 219
22.12.2011, 13:57  [ТС] #3
т.е. когда я просто объявляю
int a;
char Name[32];
на всех их идет выделение памяти из стека? а если переменная в стеке то ее удалять потом не нужно?
0
res
56 / 9 / 1
Регистрация: 05.04.2010
Сообщений: 143
22.12.2011, 14:01 #4
GBIT, удалять нужно только указатели, которых ты динамический выделяешь.
То-есть, на каждый new нужен delete.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
22.12.2011, 14:02 #5
GBIT, именно.

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

Не по теме:

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

1
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
22.12.2011, 14:10 #8
Цитата Сообщение от silent_1991 Посмотреть сообщение

Не по теме:


Жестоко

Не по теме:

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

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2011, 14:10
Привет! Вот еще темы с ответами:

Освобождение памяти - C++
Есть многопоточное приложение. Создается глобальная структура: Пример из msdn. typedef struct _MyData { int val1; ...

Освобождение памяти - C++
#include<iostream> #include<cstring> using namespace std; struct stringy{ char * str; int ct; }; stringy & set(stringy &...

Освобождение памяти - C++
Есть класс, в котором я выделяю память с помощью new. В деструкторе класса я с помощью delete освобождаю память, но у меня вылетает ошибка...

Освобождение памяти - C++
Товарищи,недавно баловался в Microsoft VS,готовился к экзаменам,писал небольшие програмки с использованием динамических массивов.Память под...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.12.2011, 14:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru