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

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

Войти
Регистрация
Восстановить пароль
 
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
#1

Динамическая память [new] - C++

24.02.2013, 21:25. Просмотров 633. Ответов 13
Метки нет (Все метки)

Если записать так:

C++
1
2
3
4
5
6
7
8
9
char *p;
p = new char[];
 
cin>>p;
 
for(int i=0; i<strlen(p); i++)
cout<<p[i]<<endl;
 
delete []p;
То он пишет про какую то точку останова, я вот не очень понимаю что это. Хотя вне компилятора в готовом виде (Relase) программа работает нормально. А если убрать delete [] p; то все будет работать нормально.

Объясните ламеру
Миниатюры
Динамическая память [new]  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2013, 21:25     Динамическая память [new]
Посмотрите здесь:

Динамическая память в классе - C++
Не знаю как в поле класса выделять память. #pragma once namespace program { class Diysni4usla { private: ...

Деструктор и динамическая память - C++
Вечер добрый, форумчане. Создал класс с матрицами, динамически выделил память. Конструктор копии вроде правильный, деструктор тоже, но...

Видеопамять и динамическая память - C++
Появилась необходимость написать программу для работы c видеопамятью и с динамической памятью. А конкретно необходимо осуществляться запись...

Динамическая память и строки - C++
Подскажите пожалуйста , как выделить динамическую память под строку , а потом освободить её? это будет что-то типа такого ...? char...

Указатели. Динамическая память в С++ - C++
Найти наибольшую и наименьшую цифры в записи данного натурального числа. У меня есть код на Паскале. Помогите переделать на С++.И...

Динамическая память и массивы - C++
Всем доброе утро . Решил по практиковаться и задался вопросом у меня есть массив a; как ему динамическую память выделить? как понял...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
24.02.2013, 22:11     Динамическая память [new] #2
Я точно не уверен, сам не силен в указателях, но:

C++
1
2
3
4
5
6
7
8
9
char *p; //Указатель на СИМВОЛ а не массив символов
p = new char[]; // Массив символов
 
cin>>p;
 
for(int i=0; i<strlen(p); i++)
cout<<p[i]<<endl;
 
delete []p;
Попробуй сделать char **p
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
24.02.2013, 22:15     Динамическая память [new] #3
Цитата Сообщение от snyppimylt Посмотреть сообщение
C++
1
p = new char[];
Надо указывать размер массива.
Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
24.02.2013, 22:21     Динамическая память [new] #4
Цитата Сообщение от gray_fox Посмотреть сообщение
Надо указывать размер массива.
Так тут же динамическое выделение памяти! Это для того и делается, что-бы потом размер задать
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
24.02.2013, 22:27     Динамическая память [new] #5
Цитата Сообщение от Seroga7 Посмотреть сообщение
Так тут же динамическое выделение памяти! Это для того и делается, что-бы потом размер задать
Нет) Путаешь тёплое с мягким))) Под динамическим выделением памяти подразумевается возможность определить размер массива на этапе выполнения, т.е. задать в кач-ве размера переменную, значение которой будет использовано в кач-ве размера массива. При статическом выделении в кач-ве размерности выступает константа, т.е. её значение известно на этапе компиляции.
easybudda
Эксперт CЭксперт С++
9461 / 5474 / 927
Регистрация: 25.07.2009
Сообщений: 10,496
24.02.2013, 22:33     Динамическая память [new] #6
Цитата Сообщение от Seroga7 Посмотреть сообщение
Так тут же динамическое выделение памяти! Это для того и делается, что-бы потом размер задать
Нет, для ввода строк произвольной длины существует класс std::string, а размер массива, динамически создаваемого оператором new[], должен задаваться при создании. Мало того, в С++ нет средства, аналогичного realloc из С, и изменить размер массива можно только создав новый и скопировав в него исходный.
Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
24.02.2013, 22:33     Динамическая память [new] #7
Цитата Сообщение от ITcrusader Посмотреть сообщение
Нет) Путаешь тёплое с мягким))) Под динамическим выделением памяти подразумевается возможность определить размер массива на этапе выполнения, т.е. задать в кач-ве размера переменную, значение которой будет использовано в кач-ве размера массива. При статическом выделении в кач-ве размерности выступает константа, т.е. её значение известно на этапе компиляции.
Точно, там как минимум переменную в квадратных скобках задать нужно...
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
24.02.2013, 22:54     Динамическая память [new] #8
Цитата Сообщение от easybudda Посмотреть сообщение
Нет, для ввода строк произвольной длины существует класс std::string, а размер массива, динамически создаваемого оператором new[], должен задаваться при создании. Мало того, в С++ нет средства, аналогичного realloc из С, и изменить размер массива можно только создав новый и скопировав в него исходный.
Ага, а потому, используй библиотеку, если только то, чем ты занимаешься - не есть ритуал посвящения в C++ программисты)))
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
24.02.2013, 22:58  [ТС]     Динамическая память [new] #9
Почитал я вас тут, половину все равно не понял, видимо литературы мало прочитал:

C++
1
2
3
4
5
6
7
8
9
10
11
char *p;
p = new char[10];
 
cin>>p;
 
for(int i=0; i<strlen(p); i++)
cout<<p[i]<<endl;
 
delete []p;
 
cout<<p;
Вот введу больше чем 10 символов, записывает, показывает и все работает нормально.

Добавлено через 2 минуты
Видимо перед работой в массиве как я понял, должно быть определено кол-во элементов.
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
24.02.2013, 22:58     Динамическая память [new] #10
Цитата Сообщение от snyppimylt Посмотреть сообщение
Вот введу больше чем 10 символов, записывает, показывает и все работает нормально.
Считай повезло, работать это не обязано.
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
24.02.2013, 23:02  [ТС]     Динамическая память [new] #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Считай повезло, работать это не обязано.
Поясните пожалуйста, в смысле "повезло" ?

Добавлено через 2 минуты
А как тогда записать столько символов сколько хочешь?
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
24.02.2013, 23:07     Динамическая память [new] #12
Цитата Сообщение от snyppimylt Посмотреть сообщение
Поясните пожалуйста, в смысле "повезло" ?
В случае "выделил память под 10 символов, записал > 10" будет обращение к невыделенной памяти. Это приводит к непредсказуемому поведению программы, т.е. может упасть, может нет, как получиться. В любом случае делать так не стоит.

Добавлено через 1 минуту
Цитата Сообщение от snyppimylt Посмотреть сообщение
А как тогда записать столько символов сколько хочешь?
Пользоваться классами, которые сами управляют выделением памяти, std::string, например.
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
24.02.2013, 23:09  [ТС]     Динамическая память [new] #13
Цитата Сообщение от gray_fox Посмотреть сообщение
Пользоваться классами, которые сами управляют выделением памяти, std::string, например.
Хорошо, спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2013, 23:13     Динамическая память [new]
Еще ссылки по теме:

Динамическая память new, delete - C++
Всем привет! Столкнулся с понятием &quot;выделение динамической памяти&quot;, прочел несколько статей на эту тему и возникли вопросы: 1. В чем...

malloc и new (динамическая память) - C++
Ребят, привет. ОЧчень интересует вопрос с динамической памятью . Как эта штука реализованна внутри ? я понимаю, что процессу выделяется в...

Стек и динамическая память - C++
Читаю книжку по с++. Для хранения переменных может использоваться стек или динамическая память. чтоб поместить в стек нужно объявить...

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


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

Или воспользуйтесь поиском по форуму:
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
24.02.2013, 23:13     Динамическая память [new] #14
Цитата Сообщение от gray_fox Посмотреть сообщение
может упасть, может нет, как получиться.
Может писать непотребные письма начальству или запускать ракеты с ядерными боеголовками откуда-нибудь, и правда,
Цитата Сообщение от gray_fox Посмотреть сообщение
делать так не стоит.
Yandex
Объявления
24.02.2013, 23:13     Динамическая память [new]
Ответ Создать тему
Опции темы

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