Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2012, 21:42   #1
Gudsaf
 
Регистрация: 24.10.2012
Сообщений: 8
Вопрос (Си) Динамический массив через realloc

Задача такая: создавать новую ячейку массива на каждый новый шаг цикла.
Примером хорошо послужит массив while.
Цитата:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

main()
{
int position;
int ch;
char *mass = NULL;
while ( (ch=getchar()) != '0')
{
position = 0;
mass = (char*)realloc(mass, sizeof(mass) + sizeof(char) );
mass[position] = ch;
position++;
}
printf ("%s", mass);
getch();
}
Как отсюда видно, я стараюсь на каждое новое нажатие клавиши (пока не встретится ноль) создавать новую ячейку массива и туда же записывать то что нажал на клавиатуре.

НЕ РАБОТАЕТ. Что-то не так, не могу понять что. Есть какие соображения?
Gudsaf вне форума Ответить с цитированием
Старый 24.10.2012, 21:48   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Размер нового блока должен быть (количество елементов + 1) * (размер каждого елемента). Где у вас хранится количество елементов?
waleri вне форума Ответить с цитированием
Старый 24.10.2012, 22:19   #3
Gudsaf
 
Регистрация: 24.10.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Размер нового блока должен быть (количество елементов + 1) * (размер каждого елемента). Где у вас хранится количество елементов?
размер нового блока:
mass или (sizeof(mass) + sizeof(char))
Gudsaf вне форума Ответить с цитированием
Старый 24.10.2012, 22:28   #4
Gudsaf
 
Регистрация: 24.10.2012
Сообщений: 8
По умолчанию

Нашёл глупую ошибку, каждый раз обнулял счётчик - оно мне и не давало перейти на сл. байт))

Правильно так:
Цитата:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

main()
{
int position = 0;
int ch;
char *mass = NULL;
while ( (ch=getchar()) != '0')
{
//position = 0; <=====================ОШИБКА
mass = (char*)realloc(mass, sizeof(mass) + sizeof(char));
mass[position] = ch;
position++;
}
printf ("%s", mass);
getch();
}
Gudsaf вне форума Ответить с цитированием
Старый 25.10.2012, 09:28   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Вы сделайте печать в теле цикла что вы передаете в качестве размера в realloc - возможноп результат вас слегка удивит.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнить динамический массив через while Shouldercannon Общие вопросы Delphi 1 06.05.2012 12:38
Динамический массив, массив указателей alexalisa Паскаль, Turbo Pascal, PascalABC.NET 4 22.04.2011 21:33
Динамический массив в Record и отправка его через lux16 Работа с сетью в Delphi 2 18.04.2011 15:33
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
Как правильно передать через ссылку двумерный динамический массив? amerhant Общие вопросы C/C++ 2 21.04.2010 23:50