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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 01:35   #1
GAleX1
Новичок
Джуниор
 
Регистрация: 29.03.2013
Сообщений: 1
По умолчанию Динамическое выделение динамической памяти

Доброго времени суток, уважаемые программисты. Столкнулся со следующей проблемой:
Хочу создать массив динамической длинны, который будет увеличиваться по мере надобности; т.е. я не хочу в начале программы выделять память под N элементов, так как я не знаю их количества, а в цикле выделять память под следующий элемент.
Вот мои наброски:
Код:
void main(){
	int *var,n = 1;
	var = new int [n];
	for(int i=0;i<10;i++){
		cin>>var[i];
		n++;
		var = new int [n];
	}
	for(int i=0;i<10;i++){
		cout<<var[i]<<endl;
	}
	delete[] var;
}
Заранее благодарен.
GAleX1 вне форума Ответить с цитированием
Старый 29.03.2013, 09:09   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Выделяете новый массив, больше старого.
Копируете старый массив в начало нового.
Удаляете старый массив.

Чтоб не делать так каждый раз, когда добавляем в массив, обычно выделяется несколько больше памяти, чем надо. Когда закончится, тогда меняем размер и начинаем все по новой.
waleri вне форума Ответить с цитированием
Старый 29.03.2013, 19:41   #3
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Цитата:
Сообщение от GAleX1 Посмотреть сообщение
Код:
void main(){
	int *var,n = 1;
	var = new int [n];
	for(int i=0;i<10;i++){
		cin>>var[i];
		n++;
		var = new int [n];
	}
	for(int i=0;i<10;i++){
		cout<<var[i]<<endl;
	}
	delete[] var;
}
Это не может работать впринципе, так как это действие:
Код:
var = new int [n];
записывает в указатель адрес совершенно нового блока памяти, который безусловно больше, чем предыдущий, но содержит мусор, а все введённые до этого данные уходят в никуда(точнее остаются где-то в памяти), даже не оставив возможности к ним обратиться.
Поэтому правильнее здесь будет воспользоваться советом waleri
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 29.03.2013, 23:18   #4
DAVID973
Пользователь
 
Регистрация: 10.03.2012
Сообщений: 16
По умолчанию

можно воспользоваться вектором...

Код:
#include <vector>
	void main(){
	vector<int> var;
	int n = 1, m;
	var.push_back(n);

	for(int i=0;i<10;i++, n++){
		cin >> m;
		var.push_back(m);
	}
	for(vector<int>::iterator it = var.begin(); it < var.end(); it++){
		cout<< *it <<endl;
	}
    }
DAVID973 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распределение памяти. Динамическое выделение памяти с++ Tolian92 Помощь студентам 8 14.05.2012 21:44
Динамическое выделение памяти , realloc. _-Re@l-_ Общие вопросы C/C++ 8 03.11.2011 10:20
Выделение динамической памяти под правый треугольник квадратной матрицы Assasin92 Общие вопросы C/C++ 0 30.10.2010 23:14
Динамическое выделение памяти под массивы Артем125 Общие вопросы C/C++ 4 07.04.2009 09:52
Динамическое выделение памяти FW-TOT Общие вопросы C/C++ 2 19.12.2008 00:42