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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2012, 20:37   #1
Gudsaf
 
Регистрация: 24.10.2012
Сообщений: 8
По умолчанию Двумерный динамический массив: с каждым шагом создаётся дополнительная строка

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

Допустим у нас есть счётчик типа for
Цитата:
int i = 0;
for (i; i < 3; i++)
Нам нужно на каждый шаг нашего счётчика for создать новую строку в двумерном массиве array, заполним числом digit
Цитата:
int i = 0;
int **array = NULL
for (i; i < 3; i++)
{
//тут где-то примерно создаётся новая строка
}
Понятно что делать нужно как-то через realloc, но как.. у меня честно говоря не получается:
Цитата:
array=(int**)realloc(array,sizeof(a rray) + 2*sizeof(mass2));
for(int i = 0; i<3 ; i++)
array[i]=(int*)realloc(mtx,sizeof(array) + sizeof(mass2));
for (int j = 0; j < 2; j++)
array [i][j] = gigit;
Gudsaf вне форума Ответить с цитированием
Старый 25.10.2012, 21:01   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Допустим у нас есть счётчик типа for
Нет такого типа. Есть char, int, long, ...

Код:
int **array = NULL
//а вот тут примерно создается первая размерность
 for (i; i < 3; i++)
 {
 //тут где-то примерно создаётся новая строка
 }
Кто такой масс2, мтикс?
Итак, что надо сделать при добавлении строки?
увеличить первую размерность на 1
выделить память под строку
заполнить эту строку
p51x вне форума Ответить с цитированием
Старый 26.10.2012, 03:59   #3
Gudsaf
 
Регистрация: 24.10.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Нет такого типа. Есть char, int, long, ...

Код:
int **array = NULL
//а вот тут примерно создается первая размерность
 for (i; i < 3; i++)
 {
 //тут где-то примерно создаётся новая строка
 }
Кто такой масс2, мтикс?
Итак, что надо сделать при добавлении строки?
увеличить первую размерность на 1
выделить память под строку
заполнить эту строку
Вот такой интересный момент.
Когда мы создаём первую размерность, мы через realloc выделяем память.
А хватит ли нам этой памяти чтобы туда влезла вторая размерность (собственно сама строка)?
Gudsaf вне форума Ответить с цитированием
Старый 26.10.2012, 10:32   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Туда должен влезть только один указатель на вашу строку. Под строку вы выделите память дальше.

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

Последний раз редактировалось p51x; 26.10.2012 в 10:39.
p51x вне форума Ответить с цитированием
Старый 26.10.2012, 11:51   #5
Gudsaf
 
Регистрация: 24.10.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Туда должен влезть только один указатель на вашу строку. Под строку вы выделите память дальше.

Возможно, вы думали о варианте, когда просто куском выделяется память и там располагается ваш массив... это тоже просто реализуется, но чревато - можно обламатся с выделением такого куска.
правильно ли понял?
Цитата:
int **array = NULL
//вот тут выделяем память под указатель А
for (i; i < 3; i++)
{
//тут указываем на память где расположен указатель А
//создаётся новая строка и пишется в то место где расположен указатель А
}
Gudsaf вне форума Ответить с цитированием
Старый 26.10.2012, 13:27   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

В моем посте два варианта... вы о каком?
p51x вне форума Ответить с цитированием
Старый 26.10.2012, 16:26   #7
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Мде =) Зачем Вам realloc? Почему не malloc? Чем new не устраивает или нужно на чистом C?

http://programmersforum.ru/showthread.php?t=215531
Помог? Оставляем отзыв =)

Последний раз редактировалось Helloween; 26.10.2012 в 16:51.
Helloween вне форума Ответить с цитированием
Старый 26.10.2012, 19:09   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Мде =) Зачем Вам realloc? Почему не malloc? Чем new не устраивает или нужно на чистом C?
Затем, что массив менятся по размерностям динамически.
Затем, что реаллок для нулла есть тотже маллок.
Затем, что реаллок для не нулла не изменяет уже введеные элементы и их доп. копировать не надо.
Затем, что ТС так захотел.
p51x вне форума Ответить с цитированием
Старый 27.10.2012, 08:43   #9
Gudsaf
 
Регистрация: 24.10.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
В моем посте два варианта... вы о каком?
Лучше два раза переспросить, чем наломать дров - вы же знаете это.
Давайте ещё раз всё по порядку, на месте первого коммента, я выделяю память строго под указатель, на месте второго коммента я выделяю памяти под строку её заполняю и указываю что строку нужно положить в по адресу где размещён указатель.
верно?

если нет поправьте пожалуйста - мне сегодня крайний день как сдавать надо!

Цитата:
Сообщение от Helloween Посмотреть сообщение
Мде =) Зачем Вам realloc? Почему не malloc? Чем new не устраивает или нужно на чистом C?

http://programmersforum.ru/showthread.php?t=215531
Что мде? Я исполнитель, мне сказал препод на си писать вот - и пишем..)

Последний раз редактировалось Gudsaf; 27.10.2012 в 09:05.
Gudsaf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi. Как увеличить компонент Tedit в 2 раза с каждым шагом Женька Good Помощь студентам 1 12.03.2012 23:49
динамический двумерный массив dart_nick Помощь студентам 0 11.12.2011 13:44
Двумерный динамический массив Markuss Помощь студентам 6 07.12.2010 09:29
Перебрать двумерный массив с шагом rubik Общие вопросы Delphi 1 17.04.2010 23:46