Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
1

Выделение памяти в цикле под массив неизвестной длины

13.11.2016, 16:48. Показов 3287. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.
Есть файл, читаю по слову в string.
Передаю в указатель на динамический массив char и обрабатываю.
Перед концом итерации цикла создаю новый массив и с ним запускается следующий шаг.

1. Можно перед циклом не делать объявление "s1 = new char[10];" ?

2. Желательно не ограничивать длину строки каким-то константным значением (10, как у меня).
Как вариант я думал после считывания слова из файла в переменную line - брать ее (длину+1) и создавать такого размера буфер.
Проблема в том, что тогда создание попадает в switch и вылезает ошибка:
potentially uninitialized local pointer variable 's1' used


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    string line;
char *s1;
s1 = new char[10];
 
while (in >> line) {
 
switch(mycase)
{
case 1:
strcpy_s(s1, line.length() + 1, line.c_str());
//обрабатываю
 
....
 
case n:
strcpy_s(s1, line.length() + 1, line.c_str());
//обрабатываю
 
s1 = new char[10];
 
break;
 
default:
    break;
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2016, 16:48
Ответы с готовыми решениями:

Выделить память под массив неизвестной длины
для программы нужен массив int Array т.е. длину строки я знаю, а сколько строк у меня будет...

Выделение памяти под массив
в массиве данных хранять в последовательных ячейках памяти В программе, выделенна память под...

Выделение памяти под массив
Требуется выделить память под матрицу. Будет ли следующий код работать корректно? ...

Выделение памяти под двумерный массив С++
Гуру С++, подскажите новичку, как обратиться к элементу при следующем выделении памяти? 1)double...

3
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
13.11.2016, 17:26 2
Цитата Сообщение от ChipChop Посмотреть сообщение
Можно перед циклом не делать объявление
Нельзя.

Если ты используешь string, то зачем эти массивы?
0
1 / 1 / 2
Регистрация: 29.09.2016
Сообщений: 111
13.11.2016, 17:44  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
Если ты используешь string, то зачем эти массивы?
в string я только читаю, а потом перехожу к char

Сейчас подумал, что мб есть вариант читать сразу
C++
1
2
3
s1 = new char[10];
 
while (in >> s1) {
как-то так

Добавлено через 14 минут
а если читать так?

C++
1
while (in >> new char[]) {
может можно туда как-то указатель запихать?
чтобы считывала сразу и память нужную выделяла программа
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
13.11.2016, 18:24 4
Лучший ответ Сообщение было отмечено ChipChop как решение

Решение

Цитата Сообщение от ChipChop Посмотреть сообщение
в string я только читаю, а потом перехожу к char
Зачем? Ну и обрабатывай дальше string.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
string line;
char *s1;
 
while (in >> line) {
 
s1 = new char[line.length() + 1];
 
switch(mycase)
{
case 1:
strcpy_s(s1, line.length() + 1, line.c_str());
//обрабатываю
 
....
 
case n:
strcpy_s(s1, line.length() + 1, line.c_str());
//обрабатываю
break;
 
delete[] s1;
}
1
13.11.2016, 18:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2016, 18:24
Помогаю со студенческими работами здесь

Выделение памяти под статический массив
меня тут заинтересовали строки std::string, никто не обращал внимания что в отладчике (ну хз...

Выделение памяти под шаблонный массив
template <class T> T* arrray <T>::create (unsigned size) { //..... T* templateBuf = new T...

Выделение памяти под двумерный массив
Доброе время ! Проблема такая : препод задал задачу сортировки массива произвольного типа(char*...

Выделение памяти под массив структур
Возникла проблема в том что не могу никак эфективно реализовать выделение памяти под массив...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru