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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.65
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
#1

массивы, new и delete - C++

20.11.2010, 13:39. Просмотров 4918. Ответов 9
Метки нет (Все метки)

Здравствуйте. Подскажите пожалуйста, чем отличается допустим символьный массив char s[]="hello";
от char *s1=new char[5] ? Тоесть в смысле чем отличается выделение памяти?
И ещё хотел узнать, допустим массив s вышеприведённый как-то удалить можно?
Про delete[] s1 я знаю, а в случае с s как?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2010, 13:39     массивы, new и delete
Посмотрите здесь:

C++ new delete
C++ delete this
C++ В чем разница между delete и delete[]?
"delete [] a, b;" эквивалентно "delete [] a; delete [] b;"? C++
C++ delete[]
Чем отличается delete[] от delete? C++
C++ new[] - delete[]
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
20.11.2010, 13:42     массивы, new и delete #2
Цитата Сообщение от +c+ Посмотреть сообщение
char s[]="hello"
память выделяется на этапе компиляции
Цитата Сообщение от +c+ Посмотреть сообщение
char *s1=new char[5]
память выделяется во время работы программы, т.е. динамически
s не удалишь
MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
20.11.2010, 13:43     массивы, new и delete #3
Цитата Сообщение от +c+ Посмотреть сообщение
Тоесть в смысле чем отличается выделение памяти?
При виделении памяти вы можете в ходе выполнения программы задать розмер массива, а без нее вы задаете розмерность массива до выполнения, и в ходе выполения она не может менятся!!!
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
20.11.2010, 13:48  [ТС]     массивы, new и delete #4
а почему так не работает?:
C++
1
2
3
char *a;
a=new char[10]="hello";
delete[] a;
MILAN
883 / 777 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
20.11.2010, 13:53     массивы, new и delete #5
C++
1
2
3
4
char *a;
a=new char[10];
a="hello";
delete[] a;
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
20.11.2010, 14:00     массивы, new и delete #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MILAN Посмотреть сообщение
C++
1
2
3
4
char *a;
a=new char[10];
a="hello";
delete[] a;
Вы уверены?
Может все таки так:
C++
1
2
3
4
char *a;
a=new char[10];
strcpy(a,"hello");
delete[] a;
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
20.11.2010, 14:03  [ТС]     массивы, new и delete #7
только хотел написать это же,
но хотел узнать, почему выдаёт ошибку в a=new char[10]="hello"; delete[] a;
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
20.11.2010, 14:11     массивы, new и delete #8
оператор new возвращает указатель на выделенную память. Нельзя указателю (который фактически является адресом) присвоить массив символов. Т.е. нельзя выполнить присвоение типа:
C++
1
12345678="Hello";
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
20.11.2010, 14:17  [ТС]     массивы, new и delete #9
а вроде char s[]="hello" - s тоже возвращает указатель! но присваивание происходит!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2010, 14:24     массивы, new и delete
Еще ссылки по теме:

C++ new и delete
delete[] *pointer vs. delete pointer и утечка памяти C++
Динамические массивы создаются в динамической области памяти с использованием операций NEW и DELETE C++
New/Delete C++

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4469 / 2831 / 224
Регистрация: 12.12.2009
Сообщений: 7,201
Записей в блоге: 1
Завершенные тесты: 1
20.11.2010, 14:24     массивы, new и delete #10
Цитата Сообщение от +c+ Посмотреть сообщение
а вроде char s[]="hello" - s тоже возвращает указатель! но присваивание происходит!
s ничего не возвращает) Это объявление + инициализация массива символов, где s является его начальным адресом. Словами это можно выразить примерно так - "выделить участок памяти для строки "hello" и присвоить адресу начала строки условное имя - s "
Yandex
Объявления
20.11.2010, 14:24     массивы, new и delete
Ответ Создать тему
Опции темы

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