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

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

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

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

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

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

Динамические массивы создаются в динамической области памяти с использованием операций NEW и DELETE - C++
Срочно нужна помощь! Массивы создаются в динамической области памяти с использованием операций NEW и DELETE. Задано два массива А (5) и...

В чем разница между delete и delete[]? - C++
а можете еще по подробней рассказать про delete, точнее даже delete, чем именно отличается delete от delete, т.к. я попробовал...

Чем отличается delete[] от delete? - C++
чем отличается? delete mas от delete mas

delete[] *pointer vs. delete pointer и утечка памяти - C++
Здравствуйте! Есть класс "умного" указателя counted_ptr, который удаляет хранящийся в нём T* owned; только если кол-во владельцев...

"delete [] a, b;" эквивалентно "delete [] a; delete [] b;"? - C++
Я правильно понимаю, что "delete a, b;" эквивалентно "delete a; delete b;" ?

New/Delete - C++
нужно рассмотреть конкретную ситуацию: область, выделенная желтым цветом будет очищена, при использовании delete, область выделенная...

9
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
20.11.2010, 13:42 #2
Цитата Сообщение от +c+ Посмотреть сообщение
char s[]="hello"
память выделяется на этапе компиляции
Цитата Сообщение от +c+ Посмотреть сообщение
char *s1=new char[5]
память выделяется во время работы программы, т.е. динамически
s не удалишь
1
MILAN
886 / 780 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
20.11.2010, 13:43 #3
Цитата Сообщение от +c+ Посмотреть сообщение
Тоесть в смысле чем отличается выделение памяти?
При виделении памяти вы можете в ходе выполнения программы задать розмер массива, а без нее вы задаете розмерность массива до выполнения, и в ходе выполения она не может менятся!!!
1
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
20.11.2010, 13:48  [ТС] #4
а почему так не работает?:
C++
1
2
3
char *a;
a=new char[10]="hello";
delete[] a;
0
MILAN
886 / 780 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
20.11.2010, 13:53 #5
C++
1
2
3
4
char *a;
a=new char[10];
a="hello";
delete[] a;
0
Kastaneda
Нарушитель
Эксперт С++
4671 / 2875 / 233
Регистрация: 12.12.2009
Сообщений: 7,308
Записей в блоге: 2
Завершенные тесты: 1
20.11.2010, 14:00 #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;
3
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
20.11.2010, 14:03  [ТС] #7
только хотел написать это же,
но хотел узнать, почему выдаёт ошибку в a=new char[10]="hello"; delete[] a;
0
Kastaneda
Нарушитель
Эксперт С++
4671 / 2875 / 233
Регистрация: 12.12.2009
Сообщений: 7,308
Записей в блоге: 2
Завершенные тесты: 1
20.11.2010, 14:11 #8
оператор new возвращает указатель на выделенную память. Нельзя указателю (который фактически является адресом) присвоить массив символов. Т.е. нельзя выполнить присвоение типа:
C++
1
12345678="Hello";
1
+c+
112 / 22 / 3
Регистрация: 20.11.2010
Сообщений: 1,294
20.11.2010, 14:17  [ТС] #9
а вроде char s[]="hello" - s тоже возвращает указатель! но присваивание происходит!
0
Kastaneda
Нарушитель
Эксперт С++
4671 / 2875 / 233
Регистрация: 12.12.2009
Сообщений: 7,308
Записей в блоге: 2
Завершенные тесты: 1
20.11.2010, 14:24 #10
Цитата Сообщение от +c+ Посмотреть сообщение
а вроде char s[]="hello" - s тоже возвращает указатель! но присваивание происходит!
s ничего не возвращает) Это объявление + инициализация массива символов, где s является его начальным адресом. Словами это можно выразить примерно так - "выделить участок памяти для строки "hello" и присвоить адресу начала строки условное имя - s "
0
20.11.2010, 14:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2010, 14:24
Привет! Вот еще темы с ответами:

delete vs. delete [] - C++
Всем привет, в разница использования delete и delete ? я читал, что delete используется для освобождения массивов, а delete для...

new и delete - C++
Ошибка, незнаю как для моего класса выделить память. Как исправить? class MyClass { int a, b, c; public: MyClass(int a,...

delete this - C++
Добрый день! У меня возник такой вопрос - почему в программе возникает неопределённое поведение для объекта, в деструкторе которого...

delete[] - C++
подскажите пожалуйста как заставить это работать? Вылетает на строчке delete. Выделяю ведь память с помощью оператора new. А в идеале...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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