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

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

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

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

24.02.2013, 21:25. Просмотров 636. Ответов 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; то все будет работать нормально.

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

Статическая память,Динамическая память. - C++
a) Статическая память. Двумерный массив. Дан массив целых чисел. В массиве есть отрицательные числа. Определить координаты левого нижнего...

Динамическая память - C++
Кто сможет помочь? Дана матрица А. Упорядочить элементы каждой строки в порядке не убывания. (нужно составить 2 программы с...

Динамическая память - C++
Народ, если кому не сложно помогите переделать вот эту программу со структурами нужно сделать так чтобы для хранения данных она...

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

Динамическая память - C++
Всем привет!!! взникла проблема с выполнением строки K=A++; при выполнении printf(&quot;\n__________ %d\n&quot;,K.gasaaa()); получаю левые...

Динамическая память с++ - C++
Как использовать динамическую память в с++

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
24.02.2013, 22:11 #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
1
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.02.2013, 22:15 #3
Цитата Сообщение от snyppimylt Посмотреть сообщение
C++
1
p = new char[];
Надо указывать размер массива.
1
Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
24.02.2013, 22:21 #4
Цитата Сообщение от gray_fox Посмотреть сообщение
Надо указывать размер массива.
Так тут же динамическое выделение памяти! Это для того и делается, что-бы потом размер задать
0
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
24.02.2013, 22:27 #5
Цитата Сообщение от Seroga7 Посмотреть сообщение
Так тут же динамическое выделение памяти! Это для того и делается, что-бы потом размер задать
Нет) Путаешь тёплое с мягким))) Под динамическим выделением памяти подразумевается возможность определить размер массива на этапе выполнения, т.е. задать в кач-ве размера переменную, значение которой будет использовано в кач-ве размера массива. При статическом выделении в кач-ве размерности выступает константа, т.е. её значение известно на этапе компиляции.
0
easybudda
Модератор
Эксперт CЭксперт С++
9625 / 5573 / 947
Регистрация: 25.07.2009
Сообщений: 10,708
24.02.2013, 22:33 #6
Цитата Сообщение от Seroga7 Посмотреть сообщение
Так тут же динамическое выделение памяти! Это для того и делается, что-бы потом размер задать
Нет, для ввода строк произвольной длины существует класс std::string, а размер массива, динамически создаваемого оператором new[], должен задаваться при создании. Мало того, в С++ нет средства, аналогичного realloc из С, и изменить размер массива можно только создав новый и скопировав в него исходный.
1
Seroga7
6 / 6 / 1
Регистрация: 08.12.2012
Сообщений: 147
24.02.2013, 22:33 #7
Цитата Сообщение от ITcrusader Посмотреть сообщение
Нет) Путаешь тёплое с мягким))) Под динамическим выделением памяти подразумевается возможность определить размер массива на этапе выполнения, т.е. задать в кач-ве размера переменную, значение которой будет использовано в кач-ве размера массива. При статическом выделении в кач-ве размерности выступает константа, т.е. её значение известно на этапе компиляции.
Точно, там как минимум переменную в квадратных скобках задать нужно...
1
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
24.02.2013, 22:54 #8
Цитата Сообщение от easybudda Посмотреть сообщение
Нет, для ввода строк произвольной длины существует класс std::string, а размер массива, динамически создаваемого оператором new[], должен задаваться при создании. Мало того, в С++ нет средства, аналогичного realloc из С, и изменить размер массива можно только создав новый и скопировав в него исходный.
Ага, а потому, используй библиотеку, если только то, чем ты занимаешься - не есть ритуал посвящения в C++ программисты)))
1
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
24.02.2013, 22:58  [ТС] #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 минуты
Видимо перед работой в массиве как я понял, должно быть определено кол-во элементов.
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
24.02.2013, 22:58 #10
Цитата Сообщение от snyppimylt Посмотреть сообщение
Вот введу больше чем 10 символов, записывает, показывает и все работает нормально.
Считай повезло, работать это не обязано.
1
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
24.02.2013, 23:02  [ТС] #11
Цитата Сообщение от gray_fox Посмотреть сообщение
Считай повезло, работать это не обязано.
Поясните пожалуйста, в смысле "повезло" ?

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

Добавлено через 1 минуту
Цитата Сообщение от snyppimylt Посмотреть сообщение
А как тогда записать столько символов сколько хочешь?
Пользоваться классами, которые сами управляют выделением памяти, std::string, например.
1
snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
24.02.2013, 23:09  [ТС] #13
Цитата Сообщение от gray_fox Посмотреть сообщение
Пользоваться классами, которые сами управляют выделением памяти, std::string, например.
Хорошо, спасибо.
0
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
24.02.2013, 23:13 #14
Цитата Сообщение от gray_fox Посмотреть сообщение
может упасть, может нет, как получиться.
Может писать непотребные письма начальству или запускать ракеты с ядерными боеголовками откуда-нибудь, и правда,
Цитата Сообщение от gray_fox Посмотреть сообщение
делать так не стоит.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2013, 23:13
Привет! Вот еще темы с ответами:

Динамическая память - C++
Есть 2 массива одной размерности: int *m1 = new int , *m2 = new int ; где N, M некие числа. Собственно вопрос: как...

Динамическая память - C++
Здраствуйте!!!! Помогите выделить память под двумерные массив элементами которого являются слова. Было бы хорошо листинг программы....

Динамическая память - C++
Дано натуральное число n и целые числа{a}_{1},{a}_{2},...,{a}_{n}. Выяснить, есть ли среди цифр {a}_{1},{a}_{2},...,{a}_{n}совпадающие и...

Динамическая память. - C++
Всем привет! Уважаемые знатоки, можете посмотреть мою реализацию класса вектор? У меня при их большем количестве в программе вечно...


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

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

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