|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.08.2015, 16:23 | #1 |
Форумчанин
Регистрация: 03.08.2013
Сообщений: 208
|
Как правильно в куче разместить массив символов
Например, есть переменная:
char *x; Я хочу в процессе работы программы присваивать массиву последовально новые значения. Примерно так: x[i] = 't'; i++; Но я не понимаю, что нужно сделать с переменной, чтобы не было проблем, ни при компиляции, ни при выполнении программы. Я пробовал так: x = new char; и так: x = new char[1024]; , но это вызывает ошибку. А если оставить просто char *x;, то тоже ошибка, так как не задан размер выделяемой памяти. Как обойти эту проблему? |
27.08.2015, 16:49 | #2 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,639
|
Код:
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
|
27.08.2015, 16:51 | #3 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Код:
I'm learning to live...
|
27.08.2015, 17:49 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
27.08.2015, 18:11 | #5 | |
Форумчанин
Регистрация: 03.08.2013
Сообщений: 208
|
string: Тоже вариант, но я пока подумаю над неклассовой переменной.
Т.к. наращивание будет литералами. char *yTestChars = new char[1024]; При использовании такого метода в g++ 4.9.2 компиляция идёт нормальна и сборка соответственно, но при выполнении такая ошибка: Цитата:
Так всё по дефолту для x86+64 Linux. Код я окружил cout. Ошибка ловится прямо на месте создания переменной с объявленным количеством памяти. Последний раз редактировалось Stilet; 27.08.2015 в 18:24. |
|
27.08.2015, 18:24 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Код в студию )
I'm learning to live...
|
27.08.2015, 18:44 | #7 | |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Цитата:
либо вы будете иметь проблемы, и тогда приятно вам долбаться дальше с ручной работой. либо возьмете готовый, удобный, безопасный инструмент std::string, и никаких проблем. а чего вы там именно наращиваете - фактор монопенисуальный. потому что std::string - эффективное средство. вряд ли вы сможете сделать ещё лучше, быстрее, и экономичнее. --------------------------------------------------- судя по логам у вас там порча памяти. а вообще лепаты в отпуске. Последний раз редактировалось _Bers; 27.08.2015 в 18:48. |
|
27.08.2015, 19:00 | #8 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,639
|
Код нужно полностью.
Код слишком огромный, да и сырой. Если Вам всё ещё будет интересно, то я постараюсь выложить архив в яндекс.диск в воскресенье и дам сюда ссылку. А пока скажу так. Переменная char *lalala; Получает данные из функции, которая возвращает тип char* Скажем char* Function1(anOperator* myAnyCode); Функция использует внутри другую функцию, которая использует переменную anOperator, которую я определил с помощью enum. Примерно так. y[i] = Function2(myAnyCode[j]); Сама функция имеет примерно такой заголовок char Function2(anOperator theLaLa); В теле Function1() идёт цикл, который обращается n-ное количество раз к функции Function2() и наращивает char*. Я вполне допускаю, что компилятор мог собрать программу так, что ошибка ловится совсем не в том месте, где думаю лично я... В общем, в воскресенье выложу, что получилось.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
Последний раз редактировалось Stilet; 27.08.2015 в 19:42. |
27.08.2015, 21:19 | #9 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
27.08.2015, 21:42 | #10 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Видимо портал глюкнул после слияния постов...
I'm learning to live...
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
нужно ли удалять указатель на символьный массив созданный в куче(динамически распределяемой памяти) | polin11 | Общие вопросы C/C++ | 1 | 08.08.2015 02:02 |
Как правильно разместить текст на сайте... | XYLIGANXYL | HTML и CSS | 5 | 30.01.2011 04:20 |
Правильно разместить div-ы | Skalka | HTML и CSS | 0 | 23.12.2010 08:32 |
Как конвертировать массив символов в массив байт | davinci | C++ Builder | 6 | 30.10.2010 18:09 |
Массив в dll - как разместить массив в dll и как вызвать элемент этого массива по индексу? | Кинельски | Помощь студентам | 0 | 23.05.2010 20:52 |