Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
mrskylines
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 5
1

Динамическое распределение памяти для символьной строки

08.10.2015, 21:06. Просмотров 588. Ответов 3
Метки нет (Все метки)

Объясните, пожалуйста, почему при динамическом распределнии памяти под символьный массив у меня все время выделяется памяти только под 8 символов, дальше увеличения памяти с помощью realloc не идет
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(int argc, char* argv[])
{int i,count=0;
char *arr=(char *)malloc(sizeof(char));
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
printf("Пожалуйста, введите ваш текст\n");
for (i=0; (*(arr+i)!='\n'); i++)
     {(*(arr+i))=getchar();
     arr=(char *)realloc(arr,2*sizeof(char));
     if (*(arr+i)=='\n')
        {arr=(char *)realloc(arr,2*sizeof(char));
        *(arr+i)='\0';}
     }
Добавлено через 25 минут
нашел ошибку. теперь выделение идет правильно.
C
1
arr=(char *)realloc(arr,2*sizeof(char));
Добавлено через 22 минуты
хотя нет. память выделяется нормально, но цикл не прерывается, даже если убрать эти строки
C
1
2
3
if (*(arr+i)=='\n')
        {arr=(char *)realloc(arr,2*sizeof(char));
        *(arr+i)='\0';}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2015, 21:06
Ответы с готовыми решениями:

Динамическое распределение памяти
Здравствуйте, помогите в решении задачи. Дана действительная квадратная матрица порядка n....

Динамическое распределение памяти
Надо добавить в двумерный массив строку с указанным номером , но не работает , как то неправильно...

Динамическое распределение памяти
Дан массив действительных случайных чисел а размером n=100. Выве-сти на экран те элементы массива,...

Динамическое распределение памяти
#include <stdio.h> #define NUM 5 #define PREDM 1 typedef struct { char fam,name ; int...

Динамическое распределение памяти в языке С
Помогите, пожалуйста решить задачу на С. В программе определите и инициализируйте переменную X...

3
Байт
Эксперт C
20458 / 12986 / 2730
Регистрация: 24.12.2010
Сообщений: 27,180
08.10.2015, 22:25 2
Цитата Сообщение от mrskylines Посмотреть сообщение
char *arr=(char *)malloc(sizeof(char));
Ты выделяешь память на один символ. Надо
C
1
char *array = (char *)malloc(N*sizeof(char));
То же и с realloc
0
mrskylines
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 5
08.10.2015, 23:31  [ТС] 3
Цитата Сообщение от Байт Посмотреть сообщение
Ты выделяешь память на один символ. Надо
так в задании как раз и требуется выделение памяти под каждый символ отдельно
0
Байт
Эксперт C
20458 / 12986 / 2730
Регистрация: 24.12.2010
Сообщений: 27,180
09.10.2015, 09:13 4
Тогда как-то так
C
1
2
3
4
5
6
7
8
N=1;
char *arr=(char *)malloc(sizeof(char));
for (i=0; (*(arr+i)!='\n'); i++) [
     (*(arr+i))=getchar();
     N++;
     arr=(char *)realloc(arr,N*sizeof(char));
     ....
}
Вы же выделяете каждый realloc одно и тоже количество байтов - 2. И запись (*(arr+i))=getchar(); идет вне массива

Добавлено через 3 минуты
По ходу вот еще одна неточность. getchar() возвращает int. Что позволяет поймать EOF. Лучше
C
1
2
3
int k = getchar();
...
*arr+i) = k;
Добавлено через 2 минуты
Еще одна. Проверка *(arr+i) !='\n' в заголовке цикла происходит ДО присвоения значения *(arr+i). Результат такой проверки не предсказуем.
0
09.10.2015, 09:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2015, 09:13

Обработка массивов данных. Указатели. Динамическое распределение памяти
Помогите написать коды на си 1.Найти максимальный по модулю элемент массива. 2. Найти сумму...

Динамическое распределение памяти: программа, вылетает на вводе непосредственно первого элемента массива
Исправте пожалуйста, вылетает на вводе непосредственно первого элемента массива из символов!...

Динамическое распределение строки
Динамическое распределение строки, строка вводится пользователем, а затем распечатывается справа...


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

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

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